From 63836c42cf0b81fc538372fae5a874708bfdb92c Mon Sep 17 00:00:00 2001 From: Krishna Bhunia Date: Mon, 14 Oct 2024 23:39:09 +0530 Subject: [PATCH 1/9] commit --- code/nb_files/rag.ipynb | 823 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 823 insertions(+) create mode 100644 code/nb_files/rag.ipynb diff --git a/code/nb_files/rag.ipynb b/code/nb_files/rag.ipynb new file mode 100644 index 00000000..53d6bc09 --- /dev/null +++ b/code/nb_files/rag.ipynb @@ -0,0 +1,823 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: faiss-cpu in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (1.9.0)\n", + "Requirement already satisfied: transformers in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (4.45.2)\n", + "Requirement already satisfied: sentence-transformers in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (3.2.0)\n", + "Requirement already satisfied: numpy<3.0,>=1.25.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from faiss-cpu) (1.26.4)\n", + "Requirement already satisfied: packaging in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from faiss-cpu) (24.1)\n", + "Requirement already satisfied: filelock in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from transformers) (3.16.1)\n", + "Requirement already satisfied: huggingface-hub<1.0,>=0.23.2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from transformers) (0.25.1)\n", + "Requirement already satisfied: pyyaml>=5.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from transformers) (6.0.2)\n", + "Requirement already satisfied: regex!=2019.12.17 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from transformers) (2024.9.11)\n", + "Requirement already satisfied: requests in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from transformers) (2.32.3)\n", + "Requirement already satisfied: safetensors>=0.4.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from transformers) (0.4.5)\n", + "Requirement already satisfied: tokenizers<0.21,>=0.20 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from transformers) (0.20.0)\n", + "Requirement already satisfied: tqdm>=4.27 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from transformers) (4.66.5)\n", + "Requirement already satisfied: torch>=1.11.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from sentence-transformers) (2.4.1)\n", + "Requirement already satisfied: scikit-learn in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from sentence-transformers) (1.5.2)\n", + "Requirement already satisfied: scipy in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from sentence-transformers) (1.14.1)\n", + "Requirement already satisfied: Pillow in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from sentence-transformers) (10.4.0)\n", + "Requirement already satisfied: fsspec>=2023.5.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from huggingface-hub<1.0,>=0.23.2->transformers) (2024.9.0)\n", + "Requirement already satisfied: typing-extensions>=3.7.4.3 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from huggingface-hub<1.0,>=0.23.2->transformers) (4.12.2)\n", + "Requirement already satisfied: sympy in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (1.13.3)\n", + "Requirement already satisfied: networkx in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (3.4.1)\n", + "Requirement already satisfied: jinja2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (3.1.4)\n", + "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (12.1.105)\n", + "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (12.1.105)\n", + "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (12.1.105)\n", + "Requirement already satisfied: nvidia-cudnn-cu12==9.1.0.70 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (9.1.0.70)\n", + "Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (12.1.3.1)\n", + "Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (11.0.2.54)\n", + "Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (10.3.2.106)\n", + "Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (11.4.5.107)\n", + "Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (12.1.0.106)\n", + "Requirement already satisfied: nvidia-nccl-cu12==2.20.5 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (2.20.5)\n", + "Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (12.1.105)\n", + "Requirement already satisfied: triton==3.0.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence-transformers) (3.0.0)\n", + "Requirement already satisfied: nvidia-nvjitlink-cu12 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.11.0->sentence-transformers) (12.6.77)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests->transformers) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests->transformers) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests->transformers) (2.2.3)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests->transformers) (2024.8.30)\n", + "Requirement already satisfied: joblib>=1.2.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from scikit-learn->sentence-transformers) (1.4.2)\n", + "Requirement already satisfied: threadpoolctl>=3.1.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from scikit-learn->sentence-transformers) (3.5.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from jinja2->torch>=1.11.0->sentence-transformers) (3.0.1)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from sympy->torch>=1.11.0->sentence-transformers) (1.3.0)\n", + "Requirement already satisfied: sentence_transformers in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (3.2.0)\n", + "Requirement already satisfied: transformers<5.0.0,>=4.41.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from sentence_transformers) (4.45.2)\n", + "Requirement already satisfied: tqdm in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from sentence_transformers) (4.66.5)\n", + "Requirement already satisfied: torch>=1.11.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from sentence_transformers) (2.4.1)\n", + "Requirement already satisfied: scikit-learn in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from sentence_transformers) (1.5.2)\n", + "Requirement already satisfied: scipy in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from sentence_transformers) (1.14.1)\n", + "Requirement already satisfied: huggingface-hub>=0.20.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from sentence_transformers) (0.25.1)\n", + "Requirement already satisfied: Pillow in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from sentence_transformers) (10.4.0)\n", + "Requirement already satisfied: filelock in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from huggingface-hub>=0.20.0->sentence_transformers) (3.16.1)\n", + "Requirement already satisfied: fsspec>=2023.5.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from huggingface-hub>=0.20.0->sentence_transformers) (2024.9.0)\n", + "Requirement already satisfied: packaging>=20.9 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from huggingface-hub>=0.20.0->sentence_transformers) (24.1)\n", + "Requirement already satisfied: pyyaml>=5.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from huggingface-hub>=0.20.0->sentence_transformers) (6.0.2)\n", + "Requirement already satisfied: requests in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from huggingface-hub>=0.20.0->sentence_transformers) (2.32.3)\n", + "Requirement already satisfied: typing-extensions>=3.7.4.3 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from huggingface-hub>=0.20.0->sentence_transformers) (4.12.2)\n", + "Requirement already satisfied: sympy in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (1.13.3)\n", + "Requirement already satisfied: networkx in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (3.4.1)\n", + "Requirement already satisfied: jinja2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (3.1.4)\n", + "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (12.1.105)\n", + "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (12.1.105)\n", + "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (12.1.105)\n", + "Requirement already satisfied: nvidia-cudnn-cu12==9.1.0.70 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (9.1.0.70)\n", + "Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (12.1.3.1)\n", + "Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (11.0.2.54)\n", + "Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (10.3.2.106)\n", + "Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (11.4.5.107)\n", + "Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (12.1.0.106)\n", + "Requirement already satisfied: nvidia-nccl-cu12==2.20.5 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (2.20.5)\n", + "Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (12.1.105)\n", + "Requirement already satisfied: triton==3.0.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from torch>=1.11.0->sentence_transformers) (3.0.0)\n", + "Requirement already satisfied: nvidia-nvjitlink-cu12 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.11.0->sentence_transformers) (12.6.77)\n", + "Requirement already satisfied: numpy>=1.17 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from transformers<5.0.0,>=4.41.0->sentence_transformers) (1.26.4)\n", + "Requirement already satisfied: regex!=2019.12.17 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from transformers<5.0.0,>=4.41.0->sentence_transformers) (2024.9.11)\n", + "Requirement already satisfied: safetensors>=0.4.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from transformers<5.0.0,>=4.41.0->sentence_transformers) (0.4.5)\n", + "Requirement already satisfied: tokenizers<0.21,>=0.20 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from transformers<5.0.0,>=4.41.0->sentence_transformers) (0.20.0)\n", + "Requirement already satisfied: joblib>=1.2.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from scikit-learn->sentence_transformers) (1.4.2)\n", + "Requirement already satisfied: threadpoolctl>=3.1.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from scikit-learn->sentence_transformers) (3.5.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from jinja2->torch>=1.11.0->sentence_transformers) (3.0.1)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests->huggingface-hub>=0.20.0->sentence_transformers) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests->huggingface-hub>=0.20.0->sentence_transformers) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests->huggingface-hub>=0.20.0->sentence_transformers) (2.2.3)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests->huggingface-hub>=0.20.0->sentence_transformers) (2024.8.30)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from sympy->torch>=1.11.0->sentence_transformers) (1.3.0)\n" + ] + } + ], + "source": [ + "! pip install faiss-cpu transformers sentence-transformers\n", + "\n", + "! pip install sentence_transformers" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "`SentenceTransformer._target_device` has been deprecated, please use `SentenceTransformer.device` instead.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 6.76568523e-02 6.34959117e-02 4.87131737e-02 7.93049857e-02\n", + " 3.74480374e-02 2.65278690e-03 3.93749885e-02 -7.09843170e-03\n", + " 5.93614578e-02 3.15370336e-02 6.00980371e-02 -5.29051535e-02\n", + " 4.06068042e-02 -2.59308834e-02 2.98428070e-02 1.12692104e-03\n", + " 7.35148638e-02 -5.03819548e-02 -1.22386672e-01 2.37029027e-02\n", + " 2.97264531e-02 4.24768589e-02 2.56337505e-02 1.99519075e-03\n", + " -5.69191128e-02 -2.71598138e-02 -3.29036042e-02 6.60248548e-02\n", + " 1.19007125e-01 -4.58790474e-02 -7.26214498e-02 -3.25839408e-02\n", + " 5.23414090e-02 4.50553074e-02 8.25307518e-03 3.67023982e-02\n", + " -1.39415488e-02 6.53919429e-02 -2.64272522e-02 2.06378274e-04\n", + " -1.36643331e-02 -3.62810642e-02 -1.95043199e-02 -2.89738514e-02\n", + " 3.94270048e-02 -8.84090886e-02 2.62423395e-03 1.36713609e-02\n", + " 4.83062416e-02 -3.11565381e-02 -1.17329188e-01 -5.11690006e-02\n", + " -8.85287821e-02 -2.18963344e-02 1.42985992e-02 4.44168001e-02\n", + " -1.34815527e-02 7.43392482e-02 2.66382527e-02 -1.98762529e-02\n", + " 1.79191548e-02 -1.06052700e-02 -9.04262960e-02 2.13269386e-02\n", + " 1.41204819e-01 -6.47169538e-03 -1.40383583e-03 -1.53609812e-02\n", + " -8.73571709e-02 7.22174346e-02 2.01403201e-02 4.25587930e-02\n", + " -3.49013992e-02 3.19583225e-04 -8.02970901e-02 -3.27472650e-02\n", + " 2.85268333e-02 -5.13658002e-02 1.09389149e-01 8.19328055e-02\n", + " -9.84040275e-02 -9.34095234e-02 -1.51292169e-02 4.51248661e-02\n", + " 4.94171530e-02 -2.51868218e-02 1.57077685e-02 -1.29290849e-01\n", + " 5.31888893e-03 4.02342947e-03 -2.34572385e-02 -6.72983006e-02\n", + " 2.92281136e-02 -2.60844957e-02 1.30625134e-02 -3.11663132e-02\n", + " -4.82713766e-02 -5.58859594e-02 -3.87505405e-02 1.20010786e-01\n", + " -1.03923846e-02 4.89705354e-02 5.53536788e-02 4.49358746e-02\n", + " -4.00972459e-03 -1.02959722e-01 -2.92968489e-02 -5.83402403e-02\n", + " 2.70472486e-02 -2.20169798e-02 -7.22241625e-02 -4.13869508e-02\n", + " -1.93298627e-02 2.73333024e-03 2.76970823e-04 -9.67588052e-02\n", + " -1.00574777e-01 -1.41922375e-02 -8.07891935e-02 4.53925766e-02\n", + " 2.45041642e-02 5.97614162e-02 -7.38185942e-02 1.19843995e-02\n", + " -6.63403869e-02 -7.69044608e-02 3.85157540e-02 -5.59361962e-33\n", + " 2.80013494e-02 -5.60784712e-02 -4.86601889e-02 2.15569288e-02\n", + " 6.01980388e-02 -4.81402874e-02 -3.50246802e-02 1.93313621e-02\n", + " -1.75151881e-02 -3.89210396e-02 -3.81067069e-03 -1.70287490e-02\n", + " 2.82100495e-02 1.28290346e-02 4.71601337e-02 6.21030182e-02\n", + " -6.43588603e-02 1.29285663e-01 -1.31230969e-02 5.23068644e-02\n", + " -3.73680368e-02 2.89094206e-02 -1.68981794e-02 -2.37330589e-02\n", + " -3.33491936e-02 -5.16762733e-02 1.55356722e-02 2.08803043e-02\n", + " -1.25371413e-02 4.59579043e-02 3.72720510e-02 2.80567184e-02\n", + " -5.90005554e-02 -1.16987983e-02 4.92182523e-02 4.70328368e-02\n", + " 7.35487938e-02 -3.70529667e-02 3.98458168e-03 1.06412461e-02\n", + " -1.61518197e-04 -5.27166203e-02 2.75927819e-02 -3.92921604e-02\n", + " 8.44718069e-02 4.86860536e-02 -4.85872431e-03 1.79948155e-02\n", + " -4.28570211e-02 1.23375189e-02 6.39956072e-03 4.04822268e-02\n", + " 1.48887532e-02 -1.53941112e-02 7.62947872e-02 2.37043556e-02\n", + " 4.45237122e-02 5.08196130e-02 -2.31251237e-03 -1.88737400e-02\n", + " -1.23335691e-02 4.66002040e-02 -5.63438274e-02 6.29927516e-02\n", + " -3.15535292e-02 3.24912705e-02 2.34673917e-02 -6.55437931e-02\n", + " 2.01710071e-02 2.57082209e-02 -1.23868510e-02 -8.36490560e-03\n", + " -6.64377436e-02 9.43074226e-02 -3.57092991e-02 -3.42483111e-02\n", + " -6.66356552e-03 -8.01526196e-03 -3.09711043e-02 4.33012322e-02\n", + " -8.21400341e-03 -1.50794983e-01 3.07692345e-02 4.00719047e-02\n", + " -3.79293561e-02 1.93219632e-03 4.00530398e-02 -8.77074450e-02\n", + " -3.68491784e-02 8.57956614e-03 -3.19251828e-02 -1.25258118e-02\n", + " 7.35538602e-02 1.34734251e-03 2.05918197e-02 2.71097760e-33\n", + " -5.18577099e-02 5.78360707e-02 -9.18985382e-02 3.94421555e-02\n", + " 1.05576530e-01 -1.96912363e-02 6.18402474e-02 -7.63465017e-02\n", + " 2.40880344e-02 9.40049514e-02 -1.16535492e-01 3.71198282e-02\n", + " 5.22425212e-02 -3.95854376e-03 5.72215021e-02 5.32860495e-03\n", + " 1.24016851e-01 1.39022358e-02 -1.10249920e-02 3.56053188e-02\n", + " -3.30754668e-02 8.16574320e-02 -1.52003858e-02 6.05585389e-02\n", + " -6.01397417e-02 3.26102600e-02 -3.48296501e-02 -1.69882085e-02\n", + " -9.74907279e-02 -2.71483976e-02 1.74711330e-03 -7.68982694e-02\n", + " -4.31858189e-02 -1.89985577e-02 -2.91660726e-02 5.77488095e-02\n", + " 2.41822079e-02 -1.16901658e-02 -6.21435530e-02 2.84351911e-02\n", + " -2.37499102e-04 -2.51783542e-02 4.39631986e-03 8.12840015e-02\n", + " 3.64184640e-02 -6.04006015e-02 -3.65517512e-02 -7.93748498e-02\n", + " -5.08535048e-03 6.69699535e-02 -1.17784351e-01 3.23743261e-02\n", + " -4.71251607e-02 -1.34459957e-02 -9.48445350e-02 8.24948866e-03\n", + " -1.06748808e-02 -6.81881532e-02 1.11816369e-03 2.48019788e-02\n", + " -6.35889247e-02 2.84492653e-02 -2.61303429e-02 8.58111084e-02\n", + " 1.14682280e-01 -5.35345152e-02 -5.63588329e-02 4.26009111e-02\n", + " 1.09454487e-02 2.09578704e-02 1.00131206e-01 3.26050818e-02\n", + " -1.84208795e-01 -3.93208489e-02 -6.91454709e-02 -6.38105348e-02\n", + " -6.56386167e-02 -6.41252473e-03 -4.79612872e-02 -7.68133253e-02\n", + " 2.95383800e-02 -2.29948424e-02 4.17037308e-02 -2.50048414e-02\n", + " -4.54513635e-03 -4.17136997e-02 -1.32289371e-02 -6.38357699e-02\n", + " -2.46475753e-03 -1.37337763e-02 1.68977026e-02 -6.30398020e-02\n", + " 8.98880735e-02 4.18171100e-02 -1.85687505e-02 -1.80442150e-08\n", + " -1.67998057e-02 -3.21578160e-02 6.30384088e-02 -4.13091965e-02\n", + " 4.44819257e-02 2.02469388e-03 6.29592761e-02 -5.17375208e-03\n", + " -1.00444201e-02 -3.05640679e-02 3.52672674e-02 5.58581576e-02\n", + " -4.67125401e-02 3.45103554e-02 3.29577848e-02 4.30114232e-02\n", + " 2.94361431e-02 -3.03164031e-02 -1.71107929e-02 7.37485513e-02\n", + " -5.47909215e-02 2.77515315e-02 6.20162580e-03 1.58800222e-02\n", + " 3.42978388e-02 -5.15752286e-03 2.35079695e-02 7.53135383e-02\n", + " 1.92843173e-02 3.36197019e-02 5.09103611e-02 1.52497053e-01\n", + " 1.64207406e-02 2.70528439e-02 3.75162140e-02 2.18553394e-02\n", + " 5.66334017e-02 -3.95747647e-02 7.12312981e-02 -5.41377217e-02\n", + " 1.03768252e-03 2.11853310e-02 -3.56309079e-02 1.09017029e-01\n", + " 2.76525831e-03 3.13996561e-02 1.38419587e-03 -3.45738269e-02\n", + " -4.59278077e-02 2.88083404e-02 7.16903480e-03 4.84684594e-02\n", + " 2.61018649e-02 -9.44074150e-03 2.82169096e-02 3.48723419e-02\n", + " 3.69098410e-02 -8.58953316e-03 -3.53206135e-02 -2.47857086e-02\n", + " -1.91921573e-02 3.80707793e-02 5.99654242e-02 -4.22286279e-02]\n", + " [ 8.64385888e-02 1.02762669e-01 5.39454352e-03 2.04439717e-03\n", + " -9.96333454e-03 2.53854915e-02 4.92875911e-02 -3.06265950e-02\n", + " 6.87254667e-02 1.01365801e-02 7.75397792e-02 -9.00807530e-02\n", + " 6.10616244e-03 -5.69898821e-02 1.41715091e-02 2.80491188e-02\n", + " -8.68465081e-02 7.64399245e-02 -1.03491284e-01 -6.77437633e-02\n", + " 6.99947476e-02 8.44251141e-02 -7.24922586e-03 1.04770530e-02\n", + " 1.34020345e-02 6.77577332e-02 -9.42086279e-02 -3.71690057e-02\n", + " 5.22617288e-02 -3.10853794e-02 -9.63406563e-02 1.57717131e-02\n", + " 2.57866811e-02 7.85244629e-02 7.89949521e-02 1.91516373e-02\n", + " 1.64356586e-02 3.10083316e-03 3.81311215e-02 2.37090923e-02\n", + " 1.05389431e-02 -4.40644920e-02 4.41738516e-02 -2.58728024e-02\n", + " 6.15378767e-02 -4.05427851e-02 -8.64140391e-02 3.19722965e-02\n", + " -8.90688854e-04 -2.44437270e-02 -9.19721127e-02 2.33939439e-02\n", + " -8.30293670e-02 4.41510528e-02 -2.49692425e-02 6.23020194e-02\n", + " -1.30353542e-03 7.51395598e-02 2.46384963e-02 -6.47244453e-02\n", + " -1.17727824e-01 3.83392125e-02 -9.11767334e-02 6.35446087e-02\n", + " 7.62739927e-02 -8.80241469e-02 9.54556745e-03 -4.69717644e-02\n", + " -8.41740668e-02 3.88823487e-02 -1.14393622e-01 6.28858525e-03\n", + " -3.49361412e-02 2.39750277e-02 -3.31317298e-02 -1.57244261e-02\n", + " -3.78955677e-02 -8.81245825e-03 7.06118718e-02 3.28066461e-02\n", + " 2.03675241e-03 -1.12278953e-01 6.79714512e-03 1.22765331e-02\n", + " 3.35303508e-02 -1.36200525e-02 -2.25490145e-02 -2.25229003e-02\n", + " -2.03194283e-02 5.04297540e-02 -7.48652816e-02 -8.22821930e-02\n", + " 7.65962303e-02 4.93392237e-02 -3.75553444e-02 1.44635085e-02\n", + " -5.72457612e-02 -1.79954618e-02 1.09697953e-01 1.19462796e-01\n", + " 8.09210294e-04 6.17057718e-02 3.26322354e-02 -1.30780086e-01\n", + " -1.48636639e-01 -6.16232865e-02 4.33885790e-02 2.67129429e-02\n", + " 1.39786145e-02 -3.94002497e-02 -2.52711698e-02 3.87744559e-03\n", + " 3.58664878e-02 -6.15420379e-02 3.76660749e-02 2.67564934e-02\n", + " -3.82658839e-02 -3.54793631e-02 -2.39227246e-02 8.67977589e-02\n", + " -1.84063427e-02 7.71039277e-02 1.39867724e-03 7.00383112e-02\n", + " -4.77877818e-02 -7.89820105e-02 5.10814302e-02 -2.99868315e-33\n", + " -3.91646437e-02 -2.56212265e-03 1.65210143e-02 9.48938914e-03\n", + " -5.66219911e-02 6.57783300e-02 -4.77002971e-02 1.11661898e-02\n", + " -5.73558584e-02 -9.16258153e-03 -2.17521247e-02 -5.59531599e-02\n", + " -1.11422865e-02 9.32793617e-02 1.66765228e-02 -1.36723584e-02\n", + " 4.34389114e-02 1.87244674e-03 7.29951682e-03 5.16332127e-02\n", + " 4.80608195e-02 1.35341436e-01 -1.71739627e-02 -1.29697947e-02\n", + " -7.50109777e-02 2.61107851e-02 2.69802269e-02 7.83087627e-04\n", + " -4.87269908e-02 1.17842462e-02 -4.59579900e-02 -4.83213626e-02\n", + " -1.95671022e-02 1.93889253e-02 1.98807400e-02 1.67432614e-02\n", + " 9.87801179e-02 -2.74087936e-02 2.34809201e-02 3.70231015e-03\n", + " -6.14514686e-02 -1.21230714e-03 -9.50471032e-03 9.25154891e-03\n", + " 2.38444228e-02 8.61232057e-02 2.26789694e-02 5.45149611e-04\n", + " 3.47129591e-02 6.25463249e-03 -6.92776917e-03 3.92400734e-02\n", + " 1.15674837e-02 3.26280035e-02 6.22155368e-02 2.76114475e-02\n", + " 1.86883584e-02 3.55805792e-02 4.11795825e-02 1.54782468e-02\n", + " 4.22690809e-02 3.82248424e-02 1.00313211e-02 -2.83246431e-02\n", + " 4.47052307e-02 -4.10459004e-02 -4.50545037e-03 -5.44734299e-02\n", + " 2.62321532e-02 1.79862473e-02 -1.23118803e-01 -4.66952287e-02\n", + " -1.35912690e-02 6.46710396e-02 3.57351894e-03 -1.22233517e-02\n", + " -1.79382414e-02 -2.55501885e-02 2.37224083e-02 4.08665510e-03\n", + " -6.51476011e-02 4.43652198e-02 4.68596071e-02 -3.25174108e-02\n", + " 4.02274309e-03 -3.97600094e-03 1.11939590e-02 -9.95597914e-02\n", + " 3.33168320e-02 8.01060945e-02 9.42692161e-02 -6.38293922e-02\n", + " 3.23151797e-02 -5.13553321e-02 -7.49880122e-03 5.30049091e-34\n", + " -4.13194261e-02 9.49646682e-02 -1.06401391e-01 4.96590249e-02\n", + " -3.41913551e-02 -3.16745862e-02 -1.71556287e-02 1.70094497e-03\n", + " 5.79758063e-02 -1.21777563e-03 -1.68536212e-02 -5.16912788e-02\n", + " 5.52998781e-02 -3.42647471e-02 3.08179744e-02 -3.10480539e-02\n", + " 9.27532539e-02 3.72663513e-02 -2.37398036e-02 4.45893966e-02\n", + " 1.46153420e-02 1.16239339e-01 -5.00112474e-02 3.88716199e-02\n", + " 4.24742932e-03 2.56976634e-02 3.27243805e-02 4.29907553e-02\n", + " -1.36144590e-02 2.56122500e-02 1.06262406e-02 -8.46864581e-02\n", + " -9.52982232e-02 1.08399898e-01 -7.51599967e-02 -1.37773855e-02\n", + " 6.37338161e-02 -4.49671596e-03 -3.25321406e-02 6.23613857e-02\n", + " 3.48052830e-02 -3.54922377e-02 -2.00222060e-02 3.66608016e-02\n", + " -2.48836726e-02 1.01818843e-02 -7.01232702e-02 -4.31950651e-02\n", + " 2.95332391e-02 -2.94990052e-04 -3.45386267e-02 1.46675557e-02\n", + " -9.83970016e-02 -4.70488369e-02 -8.85495543e-03 -8.89914110e-02\n", + " 3.50995995e-02 -1.29602015e-01 -4.98866141e-02 -6.12047426e-02\n", + " -5.97797111e-02 9.46318731e-03 4.91218604e-02 -7.75026456e-02\n", + " 8.09726790e-02 -4.79257181e-02 2.34379782e-03 7.57031217e-02\n", + " -2.40175463e-02 -1.52545972e-02 4.86738533e-02 -3.85968722e-02\n", + " -7.04831555e-02 -1.20348306e-02 -3.88791077e-02 -7.76016787e-02\n", + " -1.07243843e-02 1.04187569e-02 -2.13753488e-02 -9.17386264e-02\n", + " -1.11345164e-02 -2.96065696e-02 2.46458240e-02 4.65709856e-03\n", + " -1.63450222e-02 -3.95220071e-02 7.73373917e-02 -2.84733102e-02\n", + " -3.69938603e-03 8.27665105e-02 -1.10408636e-02 3.13984044e-02\n", + " 5.35094254e-02 5.75145818e-02 -3.17621902e-02 -1.52911284e-08\n", + " -7.99661428e-02 -4.76797298e-02 -8.59788731e-02 5.69616258e-02\n", + " -4.08866294e-02 2.23832484e-02 -4.64440649e-03 -3.80130857e-02\n", + " -3.10670827e-02 -1.07277837e-02 1.97699182e-02 7.76994461e-03\n", + " -6.09474257e-03 -3.86376418e-02 2.80272178e-02 6.78138286e-02\n", + " -2.35351361e-02 3.21747549e-02 8.02537985e-03 -2.39107087e-02\n", + " -1.21995481e-03 3.14599276e-02 -5.24924360e-02 -8.06814339e-03\n", + " 3.14773852e-03 5.11496216e-02 -4.44104448e-02 6.36013076e-02\n", + " 3.85084227e-02 3.30433287e-02 -4.18726495e-03 4.95592579e-02\n", + " -5.69604672e-02 -6.49712561e-03 -2.49793250e-02 -1.60867665e-02\n", + " 6.62289411e-02 -2.06310600e-02 1.08045787e-01 1.68547314e-02\n", + " 1.43813081e-02 -1.32127125e-02 -1.29387423e-01 6.95216581e-02\n", + " -5.55773005e-02 -6.75414056e-02 -5.45821106e-03 -6.13592425e-03\n", + " 3.90840955e-02 -6.28779829e-02 3.74063067e-02 -1.16570676e-02\n", + " 1.29150422e-02 -5.52495494e-02 5.16075790e-02 -4.30837413e-03\n", + " 5.80247082e-02 1.86944716e-02 2.27810573e-02 3.21665481e-02\n", + " 5.37978783e-02 7.02849030e-02 7.49312267e-02 -8.41775239e-02]]\n" + ] + }, + { + "ename": "NameError", + "evalue": "name 'generator' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[18], line 52\u001b[0m\n\u001b[1;32m 49\u001b[0m query \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat is the document about?\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;66;03m# Generate response using RAG\u001b[39;00m\n\u001b[0;32m---> 52\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mrag_generate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mquery\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 53\u001b[0m \u001b[38;5;28mprint\u001b[39m(response)\n", + "Cell \u001b[0;32mIn[18], line 44\u001b[0m, in \u001b[0;36mrag_generate\u001b[0;34m(query)\u001b[0m\n\u001b[1;32m 41\u001b[0m augmented_query \u001b[38;5;241m=\u001b[39m query \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(retrieved_chunks)\n\u001b[1;32m 43\u001b[0m \u001b[38;5;66;03m# Generate the response using the generative model\u001b[39;00m\n\u001b[0;32m---> 44\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mgenerator\u001b[49m(augmented_query, max_length\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m100\u001b[39m, num_return_sequences\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m 46\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mgenerated_text\u001b[39m\u001b[38;5;124m'\u001b[39m]\n", + "\u001b[0;31mNameError\u001b[0m: name 'generator' is not defined" + ] + } + ], + "source": [ + "import faiss\n", + "import numpy as np\n", + "from sentence_transformers import SentenceTransformer\n", + "from transformers import pipeline\n", + "\n", + "# Load pre-trained models\n", + "# embedding_model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') # Model for creating embeddings\n", + "# generator = pipeline('text-generation', model='gpt-3.5-turbo') # GPT for text generation\n", + "model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')\n", + "sentences = [\"This is an example sentence\", \"Each sentence is converted\"]\n", + "embeddings = HuggingFaceEmbeddings(model_name = model)\n", + "print(embeddings)\n", + "\n", + "# Document to process\n", + "document = [\n", + " \"Paragraph 1: This is the first part of the document.\",\n", + " \"Paragraph 2: This is the second part, which contains more information.\",\n", + " \"Paragraph 3: The third paragraph has additional details.\",\n", + "]\n", + "\n", + "# Step 1: Create embeddings for document chunks\n", + "document_embeddings = embedding_model.encode(document)\n", + "\n", + "# Step 2: Store embeddings in FAISS index\n", + "dimension = document_embeddings.shape[1] # Get embedding dimension\n", + "index = faiss.IndexFlatL2(dimension) # Create FAISS index\n", + "index.add(np.array(document_embeddings)) # Add embeddings to index\n", + "\n", + "# Step 3: Define a function for retrieval based on a query\n", + "def retrieve_relevant_chunks(query, top_k=2):\n", + " query_embedding = embedding_model.encode([query]) # Encode the query\n", + " distances, indices = index.search(query_embedding, top_k) # Search for top-k closest chunks\n", + " return [document[i] for i in indices[0]] # Retrieve the corresponding document chunks\n", + "\n", + "# Step 4: Define the RAG function to generate response\n", + "def rag_generate(query):\n", + " # Retrieve relevant chunks\n", + " retrieved_chunks = retrieve_relevant_chunks(query)\n", + " \n", + " # Augment the query with retrieved document chunks\n", + " augmented_query = query + \"\\n\" + \"\\n\".join(retrieved_chunks)\n", + " \n", + " # Generate the response using the generative model\n", + " response = generator(augmented_query, max_length=100, num_return_sequences=1)\n", + " \n", + " return response[0]['generated_text']\n", + "\n", + "# Example query\n", + "query = \"What is the document about?\"\n", + "\n", + "# Generate response using RAG\n", + "response = rag_generate(query)\n", + "print(response)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 6.76568523e-02 6.34959117e-02 4.87131737e-02 7.93049857e-02\n", + " 3.74480374e-02 2.65278690e-03 3.93749885e-02 -7.09843170e-03\n", + " 5.93614578e-02 3.15370336e-02 6.00980371e-02 -5.29051535e-02\n", + " 4.06068042e-02 -2.59308834e-02 2.98428070e-02 1.12692104e-03\n", + " 7.35148638e-02 -5.03819548e-02 -1.22386672e-01 2.37029027e-02\n", + " 2.97264531e-02 4.24768589e-02 2.56337505e-02 1.99519075e-03\n", + " -5.69191128e-02 -2.71598138e-02 -3.29036042e-02 6.60248548e-02\n", + " 1.19007125e-01 -4.58790474e-02 -7.26214498e-02 -3.25839408e-02\n", + " 5.23414090e-02 4.50553074e-02 8.25307518e-03 3.67023982e-02\n", + " -1.39415488e-02 6.53919429e-02 -2.64272522e-02 2.06378274e-04\n", + " -1.36643331e-02 -3.62810642e-02 -1.95043199e-02 -2.89738514e-02\n", + " 3.94270048e-02 -8.84090886e-02 2.62423395e-03 1.36713609e-02\n", + " 4.83062416e-02 -3.11565381e-02 -1.17329188e-01 -5.11690006e-02\n", + " -8.85287821e-02 -2.18963344e-02 1.42985992e-02 4.44168001e-02\n", + " -1.34815527e-02 7.43392482e-02 2.66382527e-02 -1.98762529e-02\n", + " 1.79191548e-02 -1.06052700e-02 -9.04262960e-02 2.13269386e-02\n", + " 1.41204819e-01 -6.47169538e-03 -1.40383583e-03 -1.53609812e-02\n", + " -8.73571709e-02 7.22174346e-02 2.01403201e-02 4.25587930e-02\n", + " -3.49013992e-02 3.19583225e-04 -8.02970901e-02 -3.27472650e-02\n", + " 2.85268333e-02 -5.13658002e-02 1.09389149e-01 8.19328055e-02\n", + " -9.84040275e-02 -9.34095234e-02 -1.51292169e-02 4.51248661e-02\n", + " 4.94171530e-02 -2.51868218e-02 1.57077685e-02 -1.29290849e-01\n", + " 5.31888893e-03 4.02342947e-03 -2.34572385e-02 -6.72983006e-02\n", + " 2.92281136e-02 -2.60844957e-02 1.30625134e-02 -3.11663132e-02\n", + " -4.82713766e-02 -5.58859594e-02 -3.87505405e-02 1.20010786e-01\n", + " -1.03923846e-02 4.89705354e-02 5.53536788e-02 4.49358746e-02\n", + " -4.00972459e-03 -1.02959722e-01 -2.92968489e-02 -5.83402403e-02\n", + " 2.70472486e-02 -2.20169798e-02 -7.22241625e-02 -4.13869508e-02\n", + " -1.93298627e-02 2.73333024e-03 2.76970823e-04 -9.67588052e-02\n", + " -1.00574777e-01 -1.41922375e-02 -8.07891935e-02 4.53925766e-02\n", + " 2.45041642e-02 5.97614162e-02 -7.38185942e-02 1.19843995e-02\n", + " -6.63403869e-02 -7.69044608e-02 3.85157540e-02 -5.59361962e-33\n", + " 2.80013494e-02 -5.60784712e-02 -4.86601889e-02 2.15569288e-02\n", + " 6.01980388e-02 -4.81402874e-02 -3.50246802e-02 1.93313621e-02\n", + " -1.75151881e-02 -3.89210396e-02 -3.81067069e-03 -1.70287490e-02\n", + " 2.82100495e-02 1.28290346e-02 4.71601337e-02 6.21030182e-02\n", + " -6.43588603e-02 1.29285663e-01 -1.31230969e-02 5.23068644e-02\n", + " -3.73680368e-02 2.89094206e-02 -1.68981794e-02 -2.37330589e-02\n", + " -3.33491936e-02 -5.16762733e-02 1.55356722e-02 2.08803043e-02\n", + " -1.25371413e-02 4.59579043e-02 3.72720510e-02 2.80567184e-02\n", + " -5.90005554e-02 -1.16987983e-02 4.92182523e-02 4.70328368e-02\n", + " 7.35487938e-02 -3.70529667e-02 3.98458168e-03 1.06412461e-02\n", + " -1.61518197e-04 -5.27166203e-02 2.75927819e-02 -3.92921604e-02\n", + " 8.44718069e-02 4.86860536e-02 -4.85872431e-03 1.79948155e-02\n", + " -4.28570211e-02 1.23375189e-02 6.39956072e-03 4.04822268e-02\n", + " 1.48887532e-02 -1.53941112e-02 7.62947872e-02 2.37043556e-02\n", + " 4.45237122e-02 5.08196130e-02 -2.31251237e-03 -1.88737400e-02\n", + " -1.23335691e-02 4.66002040e-02 -5.63438274e-02 6.29927516e-02\n", + " -3.15535292e-02 3.24912705e-02 2.34673917e-02 -6.55437931e-02\n", + " 2.01710071e-02 2.57082209e-02 -1.23868510e-02 -8.36490560e-03\n", + " -6.64377436e-02 9.43074226e-02 -3.57092991e-02 -3.42483111e-02\n", + " -6.66356552e-03 -8.01526196e-03 -3.09711043e-02 4.33012322e-02\n", + " -8.21400341e-03 -1.50794983e-01 3.07692345e-02 4.00719047e-02\n", + " -3.79293561e-02 1.93219632e-03 4.00530398e-02 -8.77074450e-02\n", + " -3.68491784e-02 8.57956614e-03 -3.19251828e-02 -1.25258118e-02\n", + " 7.35538602e-02 1.34734251e-03 2.05918197e-02 2.71097760e-33\n", + " -5.18577099e-02 5.78360707e-02 -9.18985382e-02 3.94421555e-02\n", + " 1.05576530e-01 -1.96912363e-02 6.18402474e-02 -7.63465017e-02\n", + " 2.40880344e-02 9.40049514e-02 -1.16535492e-01 3.71198282e-02\n", + " 5.22425212e-02 -3.95854376e-03 5.72215021e-02 5.32860495e-03\n", + " 1.24016851e-01 1.39022358e-02 -1.10249920e-02 3.56053188e-02\n", + " -3.30754668e-02 8.16574320e-02 -1.52003858e-02 6.05585389e-02\n", + " -6.01397417e-02 3.26102600e-02 -3.48296501e-02 -1.69882085e-02\n", + " -9.74907279e-02 -2.71483976e-02 1.74711330e-03 -7.68982694e-02\n", + " -4.31858189e-02 -1.89985577e-02 -2.91660726e-02 5.77488095e-02\n", + " 2.41822079e-02 -1.16901658e-02 -6.21435530e-02 2.84351911e-02\n", + " -2.37499102e-04 -2.51783542e-02 4.39631986e-03 8.12840015e-02\n", + " 3.64184640e-02 -6.04006015e-02 -3.65517512e-02 -7.93748498e-02\n", + " -5.08535048e-03 6.69699535e-02 -1.17784351e-01 3.23743261e-02\n", + " -4.71251607e-02 -1.34459957e-02 -9.48445350e-02 8.24948866e-03\n", + " -1.06748808e-02 -6.81881532e-02 1.11816369e-03 2.48019788e-02\n", + " -6.35889247e-02 2.84492653e-02 -2.61303429e-02 8.58111084e-02\n", + " 1.14682280e-01 -5.35345152e-02 -5.63588329e-02 4.26009111e-02\n", + " 1.09454487e-02 2.09578704e-02 1.00131206e-01 3.26050818e-02\n", + " -1.84208795e-01 -3.93208489e-02 -6.91454709e-02 -6.38105348e-02\n", + " -6.56386167e-02 -6.41252473e-03 -4.79612872e-02 -7.68133253e-02\n", + " 2.95383800e-02 -2.29948424e-02 4.17037308e-02 -2.50048414e-02\n", + " -4.54513635e-03 -4.17136997e-02 -1.32289371e-02 -6.38357699e-02\n", + " -2.46475753e-03 -1.37337763e-02 1.68977026e-02 -6.30398020e-02\n", + " 8.98880735e-02 4.18171100e-02 -1.85687505e-02 -1.80442150e-08\n", + " -1.67998057e-02 -3.21578160e-02 6.30384088e-02 -4.13091965e-02\n", + " 4.44819257e-02 2.02469388e-03 6.29592761e-02 -5.17375208e-03\n", + " -1.00444201e-02 -3.05640679e-02 3.52672674e-02 5.58581576e-02\n", + " -4.67125401e-02 3.45103554e-02 3.29577848e-02 4.30114232e-02\n", + " 2.94361431e-02 -3.03164031e-02 -1.71107929e-02 7.37485513e-02\n", + " -5.47909215e-02 2.77515315e-02 6.20162580e-03 1.58800222e-02\n", + " 3.42978388e-02 -5.15752286e-03 2.35079695e-02 7.53135383e-02\n", + " 1.92843173e-02 3.36197019e-02 5.09103611e-02 1.52497053e-01\n", + " 1.64207406e-02 2.70528439e-02 3.75162140e-02 2.18553394e-02\n", + " 5.66334017e-02 -3.95747647e-02 7.12312981e-02 -5.41377217e-02\n", + " 1.03768252e-03 2.11853310e-02 -3.56309079e-02 1.09017029e-01\n", + " 2.76525831e-03 3.13996561e-02 1.38419587e-03 -3.45738269e-02\n", + " -4.59278077e-02 2.88083404e-02 7.16903480e-03 4.84684594e-02\n", + " 2.61018649e-02 -9.44074150e-03 2.82169096e-02 3.48723419e-02\n", + " 3.69098410e-02 -8.58953316e-03 -3.53206135e-02 -2.47857086e-02\n", + " -1.91921573e-02 3.80707793e-02 5.99654242e-02 -4.22286279e-02]\n", + " [ 8.64385888e-02 1.02762669e-01 5.39454352e-03 2.04439717e-03\n", + " -9.96333454e-03 2.53854915e-02 4.92875911e-02 -3.06265950e-02\n", + " 6.87254667e-02 1.01365801e-02 7.75397792e-02 -9.00807530e-02\n", + " 6.10616244e-03 -5.69898821e-02 1.41715091e-02 2.80491188e-02\n", + " -8.68465081e-02 7.64399245e-02 -1.03491284e-01 -6.77437633e-02\n", + " 6.99947476e-02 8.44251141e-02 -7.24922586e-03 1.04770530e-02\n", + " 1.34020345e-02 6.77577332e-02 -9.42086279e-02 -3.71690057e-02\n", + " 5.22617288e-02 -3.10853794e-02 -9.63406563e-02 1.57717131e-02\n", + " 2.57866811e-02 7.85244629e-02 7.89949521e-02 1.91516373e-02\n", + " 1.64356586e-02 3.10083316e-03 3.81311215e-02 2.37090923e-02\n", + " 1.05389431e-02 -4.40644920e-02 4.41738516e-02 -2.58728024e-02\n", + " 6.15378767e-02 -4.05427851e-02 -8.64140391e-02 3.19722965e-02\n", + " -8.90688854e-04 -2.44437270e-02 -9.19721127e-02 2.33939439e-02\n", + " -8.30293670e-02 4.41510528e-02 -2.49692425e-02 6.23020194e-02\n", + " -1.30353542e-03 7.51395598e-02 2.46384963e-02 -6.47244453e-02\n", + " -1.17727824e-01 3.83392125e-02 -9.11767334e-02 6.35446087e-02\n", + " 7.62739927e-02 -8.80241469e-02 9.54556745e-03 -4.69717644e-02\n", + " -8.41740668e-02 3.88823487e-02 -1.14393622e-01 6.28858525e-03\n", + " -3.49361412e-02 2.39750277e-02 -3.31317298e-02 -1.57244261e-02\n", + " -3.78955677e-02 -8.81245825e-03 7.06118718e-02 3.28066461e-02\n", + " 2.03675241e-03 -1.12278953e-01 6.79714512e-03 1.22765331e-02\n", + " 3.35303508e-02 -1.36200525e-02 -2.25490145e-02 -2.25229003e-02\n", + " -2.03194283e-02 5.04297540e-02 -7.48652816e-02 -8.22821930e-02\n", + " 7.65962303e-02 4.93392237e-02 -3.75553444e-02 1.44635085e-02\n", + " -5.72457612e-02 -1.79954618e-02 1.09697953e-01 1.19462796e-01\n", + " 8.09210294e-04 6.17057718e-02 3.26322354e-02 -1.30780086e-01\n", + " -1.48636639e-01 -6.16232865e-02 4.33885790e-02 2.67129429e-02\n", + " 1.39786145e-02 -3.94002497e-02 -2.52711698e-02 3.87744559e-03\n", + " 3.58664878e-02 -6.15420379e-02 3.76660749e-02 2.67564934e-02\n", + " -3.82658839e-02 -3.54793631e-02 -2.39227246e-02 8.67977589e-02\n", + " -1.84063427e-02 7.71039277e-02 1.39867724e-03 7.00383112e-02\n", + " -4.77877818e-02 -7.89820105e-02 5.10814302e-02 -2.99868315e-33\n", + " -3.91646437e-02 -2.56212265e-03 1.65210143e-02 9.48938914e-03\n", + " -5.66219911e-02 6.57783300e-02 -4.77002971e-02 1.11661898e-02\n", + " -5.73558584e-02 -9.16258153e-03 -2.17521247e-02 -5.59531599e-02\n", + " -1.11422865e-02 9.32793617e-02 1.66765228e-02 -1.36723584e-02\n", + " 4.34389114e-02 1.87244674e-03 7.29951682e-03 5.16332127e-02\n", + " 4.80608195e-02 1.35341436e-01 -1.71739627e-02 -1.29697947e-02\n", + " -7.50109777e-02 2.61107851e-02 2.69802269e-02 7.83087627e-04\n", + " -4.87269908e-02 1.17842462e-02 -4.59579900e-02 -4.83213626e-02\n", + " -1.95671022e-02 1.93889253e-02 1.98807400e-02 1.67432614e-02\n", + " 9.87801179e-02 -2.74087936e-02 2.34809201e-02 3.70231015e-03\n", + " -6.14514686e-02 -1.21230714e-03 -9.50471032e-03 9.25154891e-03\n", + " 2.38444228e-02 8.61232057e-02 2.26789694e-02 5.45149611e-04\n", + " 3.47129591e-02 6.25463249e-03 -6.92776917e-03 3.92400734e-02\n", + " 1.15674837e-02 3.26280035e-02 6.22155368e-02 2.76114475e-02\n", + " 1.86883584e-02 3.55805792e-02 4.11795825e-02 1.54782468e-02\n", + " 4.22690809e-02 3.82248424e-02 1.00313211e-02 -2.83246431e-02\n", + " 4.47052307e-02 -4.10459004e-02 -4.50545037e-03 -5.44734299e-02\n", + " 2.62321532e-02 1.79862473e-02 -1.23118803e-01 -4.66952287e-02\n", + " -1.35912690e-02 6.46710396e-02 3.57351894e-03 -1.22233517e-02\n", + " -1.79382414e-02 -2.55501885e-02 2.37224083e-02 4.08665510e-03\n", + " -6.51476011e-02 4.43652198e-02 4.68596071e-02 -3.25174108e-02\n", + " 4.02274309e-03 -3.97600094e-03 1.11939590e-02 -9.95597914e-02\n", + " 3.33168320e-02 8.01060945e-02 9.42692161e-02 -6.38293922e-02\n", + " 3.23151797e-02 -5.13553321e-02 -7.49880122e-03 5.30049091e-34\n", + " -4.13194261e-02 9.49646682e-02 -1.06401391e-01 4.96590249e-02\n", + " -3.41913551e-02 -3.16745862e-02 -1.71556287e-02 1.70094497e-03\n", + " 5.79758063e-02 -1.21777563e-03 -1.68536212e-02 -5.16912788e-02\n", + " 5.52998781e-02 -3.42647471e-02 3.08179744e-02 -3.10480539e-02\n", + " 9.27532539e-02 3.72663513e-02 -2.37398036e-02 4.45893966e-02\n", + " 1.46153420e-02 1.16239339e-01 -5.00112474e-02 3.88716199e-02\n", + " 4.24742932e-03 2.56976634e-02 3.27243805e-02 4.29907553e-02\n", + " -1.36144590e-02 2.56122500e-02 1.06262406e-02 -8.46864581e-02\n", + " -9.52982232e-02 1.08399898e-01 -7.51599967e-02 -1.37773855e-02\n", + " 6.37338161e-02 -4.49671596e-03 -3.25321406e-02 6.23613857e-02\n", + " 3.48052830e-02 -3.54922377e-02 -2.00222060e-02 3.66608016e-02\n", + " -2.48836726e-02 1.01818843e-02 -7.01232702e-02 -4.31950651e-02\n", + " 2.95332391e-02 -2.94990052e-04 -3.45386267e-02 1.46675557e-02\n", + " -9.83970016e-02 -4.70488369e-02 -8.85495543e-03 -8.89914110e-02\n", + " 3.50995995e-02 -1.29602015e-01 -4.98866141e-02 -6.12047426e-02\n", + " -5.97797111e-02 9.46318731e-03 4.91218604e-02 -7.75026456e-02\n", + " 8.09726790e-02 -4.79257181e-02 2.34379782e-03 7.57031217e-02\n", + " -2.40175463e-02 -1.52545972e-02 4.86738533e-02 -3.85968722e-02\n", + " -7.04831555e-02 -1.20348306e-02 -3.88791077e-02 -7.76016787e-02\n", + " -1.07243843e-02 1.04187569e-02 -2.13753488e-02 -9.17386264e-02\n", + " -1.11345164e-02 -2.96065696e-02 2.46458240e-02 4.65709856e-03\n", + " -1.63450222e-02 -3.95220071e-02 7.73373917e-02 -2.84733102e-02\n", + " -3.69938603e-03 8.27665105e-02 -1.10408636e-02 3.13984044e-02\n", + " 5.35094254e-02 5.75145818e-02 -3.17621902e-02 -1.52911284e-08\n", + " -7.99661428e-02 -4.76797298e-02 -8.59788731e-02 5.69616258e-02\n", + " -4.08866294e-02 2.23832484e-02 -4.64440649e-03 -3.80130857e-02\n", + " -3.10670827e-02 -1.07277837e-02 1.97699182e-02 7.76994461e-03\n", + " -6.09474257e-03 -3.86376418e-02 2.80272178e-02 6.78138286e-02\n", + " -2.35351361e-02 3.21747549e-02 8.02537985e-03 -2.39107087e-02\n", + " -1.21995481e-03 3.14599276e-02 -5.24924360e-02 -8.06814339e-03\n", + " 3.14773852e-03 5.11496216e-02 -4.44104448e-02 6.36013076e-02\n", + " 3.85084227e-02 3.30433287e-02 -4.18726495e-03 4.95592579e-02\n", + " -5.69604672e-02 -6.49712561e-03 -2.49793250e-02 -1.60867665e-02\n", + " 6.62289411e-02 -2.06310600e-02 1.08045787e-01 1.68547314e-02\n", + " 1.43813081e-02 -1.32127125e-02 -1.29387423e-01 6.95216581e-02\n", + " -5.55773005e-02 -6.75414056e-02 -5.45821106e-03 -6.13592425e-03\n", + " 3.90840955e-02 -6.28779829e-02 3.74063067e-02 -1.16570676e-02\n", + " 1.29150422e-02 -5.52495494e-02 5.16075790e-02 -4.30837413e-03\n", + " 5.80247082e-02 1.86944716e-02 2.27810573e-02 3.21665481e-02\n", + " 5.37978783e-02 7.02849030e-02 7.49312267e-02 -8.41775239e-02]]\n" + ] + } + ], + "source": [ + "from sentence_transformers import SentenceTransformer\n", + "sentences = [\"This is an example sentence\", \"Each sentence is converted\"]\n", + "\n", + "model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')\n", + "embeddings = model.encode(sentences)\n", + "print(embeddings)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sentence embeddings:\n", + "tensor([[ 6.7657e-02, 6.3496e-02, 4.8713e-02, 7.9305e-02, 3.7448e-02,\n", + " 2.6528e-03, 3.9375e-02, -7.0984e-03, 5.9361e-02, 3.1537e-02,\n", + " 6.0098e-02, -5.2905e-02, 4.0607e-02, -2.5931e-02, 2.9843e-02,\n", + " 1.1269e-03, 7.3515e-02, -5.0382e-02, -1.2239e-01, 2.3703e-02,\n", + " 2.9726e-02, 4.2477e-02, 2.5634e-02, 1.9952e-03, -5.6919e-02,\n", + " -2.7160e-02, -3.2904e-02, 6.6025e-02, 1.1901e-01, -4.5879e-02,\n", + " -7.2621e-02, -3.2584e-02, 5.2341e-02, 4.5055e-02, 8.2531e-03,\n", + " 3.6702e-02, -1.3942e-02, 6.5392e-02, -2.6427e-02, 2.0638e-04,\n", + " -1.3664e-02, -3.6281e-02, -1.9504e-02, -2.8974e-02, 3.9427e-02,\n", + " -8.8409e-02, 2.6242e-03, 1.3671e-02, 4.8306e-02, -3.1157e-02,\n", + " -1.1733e-01, -5.1169e-02, -8.8529e-02, -2.1896e-02, 1.4299e-02,\n", + " 4.4417e-02, -1.3482e-02, 7.4339e-02, 2.6638e-02, -1.9876e-02,\n", + " 1.7919e-02, -1.0605e-02, -9.0426e-02, 2.1327e-02, 1.4120e-01,\n", + " -6.4717e-03, -1.4038e-03, -1.5361e-02, -8.7357e-02, 7.2217e-02,\n", + " 2.0140e-02, 4.2559e-02, -3.4901e-02, 3.1958e-04, -8.0297e-02,\n", + " -3.2747e-02, 2.8527e-02, -5.1366e-02, 1.0939e-01, 8.1933e-02,\n", + " -9.8404e-02, -9.3410e-02, -1.5129e-02, 4.5125e-02, 4.9417e-02,\n", + " -2.5187e-02, 1.5708e-02, -1.2929e-01, 5.3189e-03, 4.0234e-03,\n", + " -2.3457e-02, -6.7298e-02, 2.9228e-02, -2.6084e-02, 1.3063e-02,\n", + " -3.1166e-02, -4.8271e-02, -5.5886e-02, -3.8751e-02, 1.2001e-01,\n", + " -1.0392e-02, 4.8971e-02, 5.5354e-02, 4.4936e-02, -4.0097e-03,\n", + " -1.0296e-01, -2.9297e-02, -5.8340e-02, 2.7047e-02, -2.2017e-02,\n", + " -7.2224e-02, -4.1387e-02, -1.9330e-02, 2.7333e-03, 2.7697e-04,\n", + " -9.6759e-02, -1.0057e-01, -1.4192e-02, -8.0789e-02, 4.5393e-02,\n", + " 2.4504e-02, 5.9761e-02, -7.3819e-02, 1.1984e-02, -6.6340e-02,\n", + " -7.6904e-02, 3.8516e-02, -5.5936e-33, 2.8001e-02, -5.6078e-02,\n", + " -4.8660e-02, 2.1557e-02, 6.0198e-02, -4.8140e-02, -3.5025e-02,\n", + " 1.9331e-02, -1.7515e-02, -3.8921e-02, -3.8107e-03, -1.7029e-02,\n", + " 2.8210e-02, 1.2829e-02, 4.7160e-02, 6.2103e-02, -6.4359e-02,\n", + " 1.2929e-01, -1.3123e-02, 5.2307e-02, -3.7368e-02, 2.8909e-02,\n", + " -1.6898e-02, -2.3733e-02, -3.3349e-02, -5.1676e-02, 1.5536e-02,\n", + " 2.0880e-02, -1.2537e-02, 4.5958e-02, 3.7272e-02, 2.8057e-02,\n", + " -5.9001e-02, -1.1699e-02, 4.9218e-02, 4.7033e-02, 7.3549e-02,\n", + " -3.7053e-02, 3.9846e-03, 1.0641e-02, -1.6152e-04, -5.2717e-02,\n", + " 2.7593e-02, -3.9292e-02, 8.4472e-02, 4.8686e-02, -4.8587e-03,\n", + " 1.7995e-02, -4.2857e-02, 1.2338e-02, 6.3996e-03, 4.0482e-02,\n", + " 1.4889e-02, -1.5394e-02, 7.6295e-02, 2.3704e-02, 4.4524e-02,\n", + " 5.0820e-02, -2.3125e-03, -1.8874e-02, -1.2334e-02, 4.6600e-02,\n", + " -5.6344e-02, 6.2993e-02, -3.1554e-02, 3.2491e-02, 2.3467e-02,\n", + " -6.5544e-02, 2.0171e-02, 2.5708e-02, -1.2387e-02, -8.3649e-03,\n", + " -6.6438e-02, 9.4307e-02, -3.5709e-02, -3.4248e-02, -6.6636e-03,\n", + " -8.0153e-03, -3.0971e-02, 4.3301e-02, -8.2140e-03, -1.5079e-01,\n", + " 3.0769e-02, 4.0072e-02, -3.7929e-02, 1.9322e-03, 4.0053e-02,\n", + " -8.7707e-02, -3.6849e-02, 8.5796e-03, -3.1925e-02, -1.2526e-02,\n", + " 7.3554e-02, 1.3473e-03, 2.0592e-02, 2.7110e-33, -5.1858e-02,\n", + " 5.7836e-02, -9.1899e-02, 3.9442e-02, 1.0558e-01, -1.9691e-02,\n", + " 6.1840e-02, -7.6347e-02, 2.4088e-02, 9.4005e-02, -1.1654e-01,\n", + " 3.7120e-02, 5.2243e-02, -3.9585e-03, 5.7222e-02, 5.3286e-03,\n", + " 1.2402e-01, 1.3902e-02, -1.1025e-02, 3.5605e-02, -3.3075e-02,\n", + " 8.1657e-02, -1.5200e-02, 6.0559e-02, -6.0140e-02, 3.2610e-02,\n", + " -3.4830e-02, -1.6988e-02, -9.7491e-02, -2.7148e-02, 1.7471e-03,\n", + " -7.6898e-02, -4.3186e-02, -1.8999e-02, -2.9166e-02, 5.7749e-02,\n", + " 2.4182e-02, -1.1690e-02, -6.2144e-02, 2.8435e-02, -2.3750e-04,\n", + " -2.5178e-02, 4.3963e-03, 8.1284e-02, 3.6418e-02, -6.0401e-02,\n", + " -3.6552e-02, -7.9375e-02, -5.0854e-03, 6.6970e-02, -1.1778e-01,\n", + " 3.2374e-02, -4.7125e-02, -1.3446e-02, -9.4845e-02, 8.2495e-03,\n", + " -1.0675e-02, -6.8188e-02, 1.1182e-03, 2.4802e-02, -6.3589e-02,\n", + " 2.8449e-02, -2.6130e-02, 8.5811e-02, 1.1468e-01, -5.3535e-02,\n", + " -5.6359e-02, 4.2601e-02, 1.0945e-02, 2.0958e-02, 1.0013e-01,\n", + " 3.2605e-02, -1.8421e-01, -3.9321e-02, -6.9145e-02, -6.3811e-02,\n", + " -6.5639e-02, -6.4125e-03, -4.7961e-02, -7.6813e-02, 2.9538e-02,\n", + " -2.2995e-02, 4.1704e-02, -2.5005e-02, -4.5451e-03, -4.1714e-02,\n", + " -1.3229e-02, -6.3836e-02, -2.4648e-03, -1.3734e-02, 1.6898e-02,\n", + " -6.3040e-02, 8.9888e-02, 4.1817e-02, -1.8569e-02, -1.8044e-08,\n", + " -1.6800e-02, -3.2158e-02, 6.3038e-02, -4.1309e-02, 4.4482e-02,\n", + " 2.0247e-03, 6.2959e-02, -5.1738e-03, -1.0044e-02, -3.0564e-02,\n", + " 3.5267e-02, 5.5858e-02, -4.6713e-02, 3.4510e-02, 3.2958e-02,\n", + " 4.3011e-02, 2.9436e-02, -3.0316e-02, -1.7111e-02, 7.3749e-02,\n", + " -5.4791e-02, 2.7752e-02, 6.2016e-03, 1.5880e-02, 3.4298e-02,\n", + " -5.1575e-03, 2.3508e-02, 7.5314e-02, 1.9284e-02, 3.3620e-02,\n", + " 5.0910e-02, 1.5250e-01, 1.6421e-02, 2.7053e-02, 3.7516e-02,\n", + " 2.1855e-02, 5.6633e-02, -3.9575e-02, 7.1231e-02, -5.4138e-02,\n", + " 1.0377e-03, 2.1185e-02, -3.5631e-02, 1.0902e-01, 2.7653e-03,\n", + " 3.1400e-02, 1.3842e-03, -3.4574e-02, -4.5928e-02, 2.8808e-02,\n", + " 7.1690e-03, 4.8468e-02, 2.6102e-02, -9.4407e-03, 2.8217e-02,\n", + " 3.4872e-02, 3.6910e-02, -8.5895e-03, -3.5321e-02, -2.4786e-02,\n", + " -1.9192e-02, 3.8071e-02, 5.9965e-02, -4.2229e-02],\n", + " [ 8.6439e-02, 1.0276e-01, 5.3945e-03, 2.0444e-03, -9.9633e-03,\n", + " 2.5385e-02, 4.9288e-02, -3.0627e-02, 6.8725e-02, 1.0137e-02,\n", + " 7.7540e-02, -9.0081e-02, 6.1062e-03, -5.6990e-02, 1.4172e-02,\n", + " 2.8049e-02, -8.6847e-02, 7.6440e-02, -1.0349e-01, -6.7744e-02,\n", + " 6.9995e-02, 8.4425e-02, -7.2492e-03, 1.0477e-02, 1.3402e-02,\n", + " 6.7758e-02, -9.4209e-02, -3.7169e-02, 5.2262e-02, -3.1085e-02,\n", + " -9.6341e-02, 1.5772e-02, 2.5787e-02, 7.8524e-02, 7.8995e-02,\n", + " 1.9152e-02, 1.6436e-02, 3.1008e-03, 3.8131e-02, 2.3709e-02,\n", + " 1.0539e-02, -4.4064e-02, 4.4174e-02, -2.5873e-02, 6.1538e-02,\n", + " -4.0543e-02, -8.6414e-02, 3.1972e-02, -8.9069e-04, -2.4444e-02,\n", + " -9.1972e-02, 2.3394e-02, -8.3029e-02, 4.4151e-02, -2.4969e-02,\n", + " 6.2302e-02, -1.3035e-03, 7.5140e-02, 2.4638e-02, -6.4724e-02,\n", + " -1.1773e-01, 3.8339e-02, -9.1177e-02, 6.3545e-02, 7.6274e-02,\n", + " -8.8024e-02, 9.5456e-03, -4.6972e-02, -8.4174e-02, 3.8882e-02,\n", + " -1.1439e-01, 6.2886e-03, -3.4936e-02, 2.3975e-02, -3.3132e-02,\n", + " -1.5724e-02, -3.7896e-02, -8.8125e-03, 7.0612e-02, 3.2807e-02,\n", + " 2.0368e-03, -1.1228e-01, 6.7971e-03, 1.2277e-02, 3.3530e-02,\n", + " -1.3620e-02, -2.2549e-02, -2.2523e-02, -2.0319e-02, 5.0430e-02,\n", + " -7.4865e-02, -8.2282e-02, 7.6596e-02, 4.9339e-02, -3.7555e-02,\n", + " 1.4464e-02, -5.7246e-02, -1.7995e-02, 1.0970e-01, 1.1946e-01,\n", + " 8.0921e-04, 6.1706e-02, 3.2632e-02, -1.3078e-01, -1.4864e-01,\n", + " -6.1623e-02, 4.3389e-02, 2.6713e-02, 1.3979e-02, -3.9400e-02,\n", + " -2.5271e-02, 3.8774e-03, 3.5866e-02, -6.1542e-02, 3.7666e-02,\n", + " 2.6756e-02, -3.8266e-02, -3.5479e-02, -2.3923e-02, 8.6798e-02,\n", + " -1.8406e-02, 7.7104e-02, 1.3987e-03, 7.0038e-02, -4.7788e-02,\n", + " -7.8982e-02, 5.1081e-02, -2.9987e-33, -3.9165e-02, -2.5621e-03,\n", + " 1.6521e-02, 9.4894e-03, -5.6622e-02, 6.5778e-02, -4.7700e-02,\n", + " 1.1166e-02, -5.7356e-02, -9.1626e-03, -2.1752e-02, -5.5953e-02,\n", + " -1.1142e-02, 9.3279e-02, 1.6677e-02, -1.3672e-02, 4.3439e-02,\n", + " 1.8724e-03, 7.2995e-03, 5.1633e-02, 4.8061e-02, 1.3534e-01,\n", + " -1.7174e-02, -1.2970e-02, -7.5011e-02, 2.6111e-02, 2.6980e-02,\n", + " 7.8309e-04, -4.8727e-02, 1.1784e-02, -4.5958e-02, -4.8321e-02,\n", + " -1.9567e-02, 1.9389e-02, 1.9881e-02, 1.6743e-02, 9.8780e-02,\n", + " -2.7409e-02, 2.3481e-02, 3.7023e-03, -6.1451e-02, -1.2123e-03,\n", + " -9.5047e-03, 9.2515e-03, 2.3844e-02, 8.6123e-02, 2.2679e-02,\n", + " 5.4515e-04, 3.4713e-02, 6.2546e-03, -6.9278e-03, 3.9240e-02,\n", + " 1.1567e-02, 3.2628e-02, 6.2216e-02, 2.7611e-02, 1.8688e-02,\n", + " 3.5581e-02, 4.1180e-02, 1.5478e-02, 4.2269e-02, 3.8225e-02,\n", + " 1.0031e-02, -2.8325e-02, 4.4705e-02, -4.1046e-02, -4.5055e-03,\n", + " -5.4473e-02, 2.6232e-02, 1.7986e-02, -1.2312e-01, -4.6695e-02,\n", + " -1.3591e-02, 6.4671e-02, 3.5735e-03, -1.2223e-02, -1.7938e-02,\n", + " -2.5550e-02, 2.3722e-02, 4.0867e-03, -6.5148e-02, 4.4365e-02,\n", + " 4.6860e-02, -3.2517e-02, 4.0227e-03, -3.9760e-03, 1.1194e-02,\n", + " -9.9560e-02, 3.3317e-02, 8.0106e-02, 9.4269e-02, -6.3829e-02,\n", + " 3.2315e-02, -5.1355e-02, -7.4988e-03, 5.3005e-34, -4.1319e-02,\n", + " 9.4965e-02, -1.0640e-01, 4.9659e-02, -3.4191e-02, -3.1675e-02,\n", + " -1.7156e-02, 1.7009e-03, 5.7976e-02, -1.2178e-03, -1.6854e-02,\n", + " -5.1691e-02, 5.5300e-02, -3.4265e-02, 3.0818e-02, -3.1048e-02,\n", + " 9.2753e-02, 3.7266e-02, -2.3740e-02, 4.4589e-02, 1.4615e-02,\n", + " 1.1624e-01, -5.0011e-02, 3.8872e-02, 4.2474e-03, 2.5698e-02,\n", + " 3.2724e-02, 4.2991e-02, -1.3614e-02, 2.5612e-02, 1.0626e-02,\n", + " -8.4686e-02, -9.5298e-02, 1.0840e-01, -7.5160e-02, -1.3777e-02,\n", + " 6.3734e-02, -4.4967e-03, -3.2532e-02, 6.2361e-02, 3.4805e-02,\n", + " -3.5492e-02, -2.0022e-02, 3.6661e-02, -2.4884e-02, 1.0182e-02,\n", + " -7.0123e-02, -4.3195e-02, 2.9533e-02, -2.9499e-04, -3.4539e-02,\n", + " 1.4668e-02, -9.8397e-02, -4.7049e-02, -8.8550e-03, -8.8991e-02,\n", + " 3.5100e-02, -1.2960e-01, -4.9887e-02, -6.1205e-02, -5.9780e-02,\n", + " 9.4632e-03, 4.9122e-02, -7.7503e-02, 8.0973e-02, -4.7926e-02,\n", + " 2.3438e-03, 7.5703e-02, -2.4018e-02, -1.5255e-02, 4.8674e-02,\n", + " -3.8597e-02, -7.0483e-02, -1.2035e-02, -3.8879e-02, -7.7602e-02,\n", + " -1.0724e-02, 1.0419e-02, -2.1375e-02, -9.1739e-02, -1.1135e-02,\n", + " -2.9607e-02, 2.4646e-02, 4.6571e-03, -1.6345e-02, -3.9522e-02,\n", + " 7.7337e-02, -2.8473e-02, -3.6994e-03, 8.2767e-02, -1.1041e-02,\n", + " 3.1398e-02, 5.3509e-02, 5.7515e-02, -3.1762e-02, -1.5291e-08,\n", + " -7.9966e-02, -4.7680e-02, -8.5979e-02, 5.6962e-02, -4.0887e-02,\n", + " 2.2383e-02, -4.6444e-03, -3.8013e-02, -3.1067e-02, -1.0728e-02,\n", + " 1.9770e-02, 7.7699e-03, -6.0947e-03, -3.8638e-02, 2.8027e-02,\n", + " 6.7814e-02, -2.3535e-02, 3.2175e-02, 8.0254e-03, -2.3911e-02,\n", + " -1.2200e-03, 3.1460e-02, -5.2492e-02, -8.0681e-03, 3.1477e-03,\n", + " 5.1150e-02, -4.4410e-02, 6.3601e-02, 3.8508e-02, 3.3043e-02,\n", + " -4.1873e-03, 4.9559e-02, -5.6960e-02, -6.4971e-03, -2.4979e-02,\n", + " -1.6087e-02, 6.6229e-02, -2.0631e-02, 1.0805e-01, 1.6855e-02,\n", + " 1.4381e-02, -1.3213e-02, -1.2939e-01, 6.9522e-02, -5.5577e-02,\n", + " -6.7541e-02, -5.4582e-03, -6.1359e-03, 3.9084e-02, -6.2878e-02,\n", + " 3.7406e-02, -1.1657e-02, 1.2915e-02, -5.5250e-02, 5.1608e-02,\n", + " -4.3084e-03, 5.8025e-02, 1.8694e-02, 2.2781e-02, 3.2167e-02,\n", + " 5.3798e-02, 7.0285e-02, 7.4931e-02, -8.4178e-02]])\n" + ] + } + ], + "source": [ + "from transformers import AutoTokenizer, AutoModel\n", + "import torch\n", + "import torch.nn.functional as F\n", + "\n", + "#Mean Pooling - Take attention mask into account for correct averaging\n", + "def mean_pooling(model_output, attention_mask):\n", + " token_embeddings = model_output[0] #First element of model_output contains all token embeddings\n", + " input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()\n", + " return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)\n", + "\n", + "\n", + "# Sentences we want sentence embeddings for\n", + "sentences = ['This is an example sentence', 'Each sentence is converted']\n", + "\n", + "# Load model from HuggingFace Hub\n", + "tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')\n", + "model = AutoModel.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')\n", + "\n", + "# Tokenize sentences\n", + "encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')\n", + "\n", + "# Compute token embeddings\n", + "with torch.no_grad():\n", + " model_output = model(**encoded_input)\n", + "\n", + "# Perform pooling\n", + "sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])\n", + "\n", + "# Normalize embeddings\n", + "sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)\n", + "\n", + "print(\"Sentence embeddings:\")\n", + "print(sentence_embeddings)\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "venv_kri_mes", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From c38d9133f0e12a1f841eabe365d4612ad24a39e4 Mon Sep 17 00:00:00 2001 From: Krishna Bhunia Date: Mon, 14 Oct 2024 23:45:03 +0530 Subject: [PATCH 2/9] new commit --- code/nb_files/rag2.ipynb | 111 +++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + 2 files changed, 112 insertions(+) create mode 100644 code/nb_files/rag2.ipynb create mode 100644 requirements.txt diff --git a/code/nb_files/rag2.ipynb b/code/nb_files/rag2.ipynb new file mode 100644 index 00000000..ccf2d93f --- /dev/null +++ b/code/nb_files/rag2.ipynb @@ -0,0 +1,111 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: langchain-groq in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (0.2.0)\n", + "Requirement already satisfied: groq<1,>=0.4.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-groq) (0.11.0)\n", + "Requirement already satisfied: langchain-core<0.4,>=0.3 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-groq) (0.3.9)\n", + "Requirement already satisfied: anyio<5,>=3.5.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain-groq) (4.6.0)\n", + "Requirement already satisfied: distro<2,>=1.7.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain-groq) (1.9.0)\n", + "Requirement already satisfied: httpx<1,>=0.23.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain-groq) (0.27.2)\n", + "Requirement already satisfied: pydantic<3,>=1.9.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain-groq) (2.9.2)\n", + "Requirement already satisfied: sniffio in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain-groq) (1.3.1)\n", + "Requirement already satisfied: typing-extensions<5,>=4.7 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain-groq) (4.12.2)\n", + "Requirement already satisfied: PyYAML>=5.3 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain-groq) (6.0.2)\n", + "Requirement already satisfied: jsonpatch<2.0,>=1.33 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain-groq) (1.33)\n", + "Requirement already satisfied: langsmith<0.2.0,>=0.1.125 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain-groq) (0.1.132)\n", + "Requirement already satisfied: packaging<25,>=23.2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain-groq) (24.1)\n", + "Requirement already satisfied: tenacity!=8.4.0,<9.0.0,>=8.1.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain-groq) (8.5.0)\n", + "Requirement already satisfied: idna>=2.8 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from anyio<5,>=3.5.0->groq<1,>=0.4.1->langchain-groq) (3.10)\n", + "Requirement already satisfied: exceptiongroup>=1.0.2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from anyio<5,>=3.5.0->groq<1,>=0.4.1->langchain-groq) (1.2.2)\n", + "Requirement already satisfied: certifi in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain-groq) (2024.8.30)\n", + "Requirement already satisfied: httpcore==1.* in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain-groq) (1.0.6)\n", + "Requirement already satisfied: h11<0.15,>=0.13 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain-groq) (0.14.0)\n", + "Requirement already satisfied: jsonpointer>=1.9 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from jsonpatch<2.0,>=1.33->langchain-core<0.4,>=0.3->langchain-groq) (3.0.0)\n", + "Requirement already satisfied: orjson<4.0.0,>=3.9.14 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain-groq) (3.10.7)\n", + "Requirement already satisfied: requests<3,>=2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain-groq) (2.32.3)\n", + "Requirement already satisfied: requests-toolbelt<2.0.0,>=1.0.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain-groq) (1.0.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from pydantic<3,>=1.9.0->groq<1,>=0.4.1->langchain-groq) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.23.4 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from pydantic<3,>=1.9.0->groq<1,>=0.4.1->langchain-groq) (2.23.4)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests<3,>=2->langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain-groq) (3.3.2)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests<3,>=2->langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain-groq) (2.2.3)\n" + ] + } + ], + "source": [ + "! pip install langchain-groq\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'langchain_grog'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[18], line 6\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mlangchain\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01magents\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m create_tool_calling_agent\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mlangchain\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01magents\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m AgentExecutor\n\u001b[0;32m----> 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mlangchain_grog\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ChatGrog\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mlangchain_core\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mprompts\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ChatPromptTemplate\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mdotenv\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m load_dotenv\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'langchain_grog'" + ] + } + ], + "source": [ + "from langchain_core.tools import tool\n", + "\n", + "from langchain.agents import create_tool_calling_agent\n", + "from langchain.agents import AgentExecutor\n", + "\n", + "from langchain_grog import ChatGrog\n", + "\n", + "from langchain_core.prompts import ChatPromptTemplate\n", + "from dotenv import load_dotenv\n", + "\n", + "load_dotenv()\n", + "\n", + "from langchain_community.vectorstores import FAISS\n", + "from langchain_huggingface import HuggingFaceEmbeddings\n", + "from langchain_community.document_loaders import TextLoader\n", + "from langchain.text_splitter import CharacterTextSplitter\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "venv_kri_mes", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..5e356844 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +langchain_grog \ No newline at end of file From 7aa2fd943addd25a7b7f032214701d4420ac3831 Mon Sep 17 00:00:00 2001 From: Krishna Bhunia Date: Tue, 15 Oct 2024 00:21:12 +0530 Subject: [PATCH 3/9] rag2 commit --- code/nb_files/krishna_resume.pdf | Bin 0 -> 162118 bytes code/nb_files/langdoc.txt | 1 + code/nb_files/rag2.ipynb | 280 ++++++++++++++++++++++++++----- requirements.txt | 3 +- 4 files changed, 237 insertions(+), 47 deletions(-) create mode 100644 code/nb_files/krishna_resume.pdf create mode 100644 code/nb_files/langdoc.txt diff --git a/code/nb_files/krishna_resume.pdf b/code/nb_files/krishna_resume.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8e525b3c90fa5c41216bec88748d5ac7f3e7d33a GIT binary patch literal 162118 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%0D2$v2he+< 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 KdpE(-Nc2DA@1jQl literal 0 HcmV?d00001 diff --git a/code/nb_files/langdoc.txt b/code/nb_files/langdoc.txt new file mode 100644 index 00000000..7a887f00 --- /dev/null +++ b/code/nb_files/langdoc.txt @@ -0,0 +1 @@ +KRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers diff --git a/code/nb_files/rag2.ipynb b/code/nb_files/rag2.ipynb index ccf2d93f..c9a69cab 100644 --- a/code/nb_files/rag2.ipynb +++ b/code/nb_files/rag2.ipynb @@ -2,71 +2,69 @@ "cells": [ { "cell_type": "code", - "execution_count": 16, + "execution_count": 60, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n", + "To disable this warning, you can either:\n", + "\t- Avoid using `tokenizers` before the fork if possible\n", + "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: langchain-groq in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (0.2.0)\n", - "Requirement already satisfied: groq<1,>=0.4.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-groq) (0.11.0)\n", - "Requirement already satisfied: langchain-core<0.4,>=0.3 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-groq) (0.3.9)\n", - "Requirement already satisfied: anyio<5,>=3.5.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain-groq) (4.6.0)\n", - "Requirement already satisfied: distro<2,>=1.7.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain-groq) (1.9.0)\n", - "Requirement already satisfied: httpx<1,>=0.23.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain-groq) (0.27.2)\n", - "Requirement already satisfied: pydantic<3,>=1.9.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain-groq) (2.9.2)\n", - "Requirement already satisfied: sniffio in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain-groq) (1.3.1)\n", - "Requirement already satisfied: typing-extensions<5,>=4.7 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain-groq) (4.12.2)\n", - "Requirement already satisfied: PyYAML>=5.3 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain-groq) (6.0.2)\n", - "Requirement already satisfied: jsonpatch<2.0,>=1.33 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain-groq) (1.33)\n", - "Requirement already satisfied: langsmith<0.2.0,>=0.1.125 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain-groq) (0.1.132)\n", - "Requirement already satisfied: packaging<25,>=23.2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain-groq) (24.1)\n", - "Requirement already satisfied: tenacity!=8.4.0,<9.0.0,>=8.1.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain-groq) (8.5.0)\n", - "Requirement already satisfied: idna>=2.8 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from anyio<5,>=3.5.0->groq<1,>=0.4.1->langchain-groq) (3.10)\n", - "Requirement already satisfied: exceptiongroup>=1.0.2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from anyio<5,>=3.5.0->groq<1,>=0.4.1->langchain-groq) (1.2.2)\n", - "Requirement already satisfied: certifi in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain-groq) (2024.8.30)\n", - "Requirement already satisfied: httpcore==1.* in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain-groq) (1.0.6)\n", - "Requirement already satisfied: h11<0.15,>=0.13 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain-groq) (0.14.0)\n", - "Requirement already satisfied: jsonpointer>=1.9 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from jsonpatch<2.0,>=1.33->langchain-core<0.4,>=0.3->langchain-groq) (3.0.0)\n", - "Requirement already satisfied: orjson<4.0.0,>=3.9.14 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain-groq) (3.10.7)\n", - "Requirement already satisfied: requests<3,>=2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain-groq) (2.32.3)\n", - "Requirement already satisfied: requests-toolbelt<2.0.0,>=1.0.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain-groq) (1.0.0)\n", - "Requirement already satisfied: annotated-types>=0.6.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from pydantic<3,>=1.9.0->groq<1,>=0.4.1->langchain-groq) (0.7.0)\n", - "Requirement already satisfied: pydantic-core==2.23.4 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from pydantic<3,>=1.9.0->groq<1,>=0.4.1->langchain-groq) (2.23.4)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests<3,>=2->langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain-groq) (3.3.2)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests<3,>=2->langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain-groq) (2.2.3)\n" + "Requirement already satisfied: langchain_groq in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (0.2.0)\n", + "Requirement already satisfied: groq<1,>=0.4.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain_groq) (0.11.0)\n", + "Requirement already satisfied: langchain-core<0.4,>=0.3 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain_groq) (0.3.9)\n", + "Requirement already satisfied: anyio<5,>=3.5.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (4.6.0)\n", + "Requirement already satisfied: distro<2,>=1.7.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (1.9.0)\n", + "Requirement already satisfied: httpx<1,>=0.23.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (0.27.2)\n", + "Requirement already satisfied: pydantic<3,>=1.9.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (2.9.2)\n", + "Requirement already satisfied: sniffio in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (1.3.1)\n", + "Requirement already satisfied: typing-extensions<5,>=4.7 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (4.12.2)\n", + "Requirement already satisfied: PyYAML>=5.3 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (6.0.2)\n", + "Requirement already satisfied: jsonpatch<2.0,>=1.33 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (1.33)\n", + "Requirement already satisfied: langsmith<0.2.0,>=0.1.125 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (0.1.132)\n", + "Requirement already satisfied: packaging<25,>=23.2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (24.1)\n", + "Requirement already satisfied: tenacity!=8.4.0,<9.0.0,>=8.1.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (8.5.0)\n", + "Requirement already satisfied: idna>=2.8 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from anyio<5,>=3.5.0->groq<1,>=0.4.1->langchain_groq) (3.10)\n", + "Requirement already satisfied: exceptiongroup>=1.0.2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from anyio<5,>=3.5.0->groq<1,>=0.4.1->langchain_groq) (1.2.2)\n", + "Requirement already satisfied: certifi in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain_groq) (2024.8.30)\n", + "Requirement already satisfied: httpcore==1.* in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain_groq) (1.0.6)\n", + "Requirement already satisfied: h11<0.15,>=0.13 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain_groq) (0.14.0)\n", + "Requirement already satisfied: jsonpointer>=1.9 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from jsonpatch<2.0,>=1.33->langchain-core<0.4,>=0.3->langchain_groq) (3.0.0)\n", + "Requirement already satisfied: orjson<4.0.0,>=3.9.14 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (3.10.7)\n", + "Requirement already satisfied: requests<3,>=2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (2.32.3)\n", + "Requirement already satisfied: requests-toolbelt<2.0.0,>=1.0.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (1.0.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from pydantic<3,>=1.9.0->groq<1,>=0.4.1->langchain_groq) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.23.4 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from pydantic<3,>=1.9.0->groq<1,>=0.4.1->langchain_groq) (2.23.4)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests<3,>=2->langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (3.3.2)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests<3,>=2->langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (2.2.3)\n" ] } ], "source": [ - "! pip install langchain-groq\n" + "! pip install langchain_groq\n" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 61, "metadata": {}, - "outputs": [ - { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'langchain_grog'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[18], line 6\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mlangchain\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01magents\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m create_tool_calling_agent\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mlangchain\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01magents\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m AgentExecutor\n\u001b[0;32m----> 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mlangchain_grog\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ChatGrog\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mlangchain_core\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mprompts\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ChatPromptTemplate\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mdotenv\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m load_dotenv\n", - "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'langchain_grog'" - ] - } - ], + "outputs": [], "source": [ "from langchain_core.tools import tool\n", "\n", "from langchain.agents import create_tool_calling_agent\n", "from langchain.agents import AgentExecutor\n", "\n", - "from langchain_grog import ChatGrog\n", + "from langchain_groq import ChatGroq\n", "\n", "from langchain_core.prompts import ChatPromptTemplate\n", "from dotenv import load_dotenv\n", @@ -81,10 +79,200 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 62, + "metadata": {}, + "outputs": [], + "source": [ + "# Load documents\n", + "loader = TextLoader(\"langdoc.txt\")\n", + "documents = loader.load()\n", + "\n", + "# Split text into chunks\n", + "text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)\n", + "texts = text_splitter.split_documents(documents)\n", + "\n", + "embedding_model_name = \"sentence-transformers/all-MiniLM-L6-v2\"\n", + "embeddings = HuggingFaceEmbeddings(model_name=embedding_model_name)\n", + "\n", + "vector_store = FAISS.from_documents(texts, embeddings)\n", + "retriever = vector_store.as_retriever()\n", + "prompt = ChatPromptTemplate.from_messages(\n", + " [\n", + " (\"system\", \"You are a helpful assistant\"),\n", + " (\"placeholder\", \"{chat_history}\"),\n", + " (\"human\", \"{input}\"),\n", + " (\"placeholder\", \"{agent_scratchpad}\")\n", + " ]\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 63, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "# llm = ChatGroq(\n", + "# model=\"mixtral-8x7b-32768\",\n", + "# temperature=0,\n", + "# max_tokens=None,\n", + "# timeout=None,\n", + "# max_retries=2\n", + "# )\n", + "\n", + "llm = ChatGroq(model=\"llama3-70b-8192\", temperature=1)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "@tool\n", + "def retrieve_documents(query: str) -> str:\n", + " \"\"\"Retrieve relevant documents based on the query\"\"\"\n", + " docs = retriever.invoke(query)\n", + " return \"\\n\".join([doc.page_content for doc in docs])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `retrieve_documents` with `{'query': 'who is Krishna?'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3m\n", + "Invoking: `retrieve_documents` with `{'query': 'Krishna'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mIt seems like the retrieved document is not about the mythological figure Krishna, but rather a software engineer with the same name. If you are looking for information about the mythological figure Krishna, I can try to assist you with that.\n", + "\n", + "Krishna is a major deity in Hinduism and is considered to be the eighth avatar (incarnation) of Lord Vishnu. He is often depicted as a blue-skinned god holding a flute and is known for his wisdom, bravery, and divine love. Krishna is said to have lived in the city of Dwarka and is believed to have played a key role in the Mahabharata, an ancient Indian epic.\n", + "\n", + "Would you like to know more about Krishna's life, teachings, or his role in Hindu mythology?\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "{'input': 'Retrieve relevant documents for: who is Krishna?',\n", + " 'output': \"It seems like the retrieved document is not about the mythological figure Krishna, but rather a software engineer with the same name. If you are looking for information about the mythological figure Krishna, I can try to assist you with that.\\n\\nKrishna is a major deity in Hinduism and is considered to be the eighth avatar (incarnation) of Lord Vishnu. He is often depicted as a blue-skinned god holding a flute and is known for his wisdom, bravery, and divine love. Krishna is said to have lived in the city of Dwarka and is believed to have played a key role in the Mahabharata, an ancient Indian epic.\\n\\nWould you like to know more about Krishna's life, teachings, or his role in Hindu mythology?\"}" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tools = [retrieve_documents]\n", + "query = \"who is Krishna?\"\n", + "\n", + "agent = create_tool_calling_agent(llm, tools, prompt)\n", + "agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)\n", + "agent_executor.invoke({\"input\": f\"Retrieve relevant documents for: {query}\"})\n" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `retrieve_documents` with `{'query': 'where Krishna works'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mTool use failed: no tool can be called with name extract_answer\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "{'input': 'Retrieve relevant documents for: Pls answer in one word, where Krishna works?',\n", + " 'output': 'Tool use failed: no tool can be called with name extract_answer'}" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tools = [retrieve_documents]\n", + "query = \"Pls answer in one word, where Krishna works?\"\n", + "\n", + "agent = create_tool_calling_agent(llm, tools, prompt)\n", + "agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)\n", + "agent_executor.invoke({\"input\": f\"Retrieve relevant documents for: {query}\"})\n" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `retrieve_documents` with `{'query': 'Krishna was working on 2012'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3m\n", + "Invoking: `retrieve_documents` with `{'query': 'Krishna DIPAYAN BHUNIA working experience in 2012'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mBased on the provided information, it appears that Krishna Dipayan Bhunia was working as a Graduate Engineer Trainee in Godrej & Boyce in the CRM domain from October 2012 to September 2013.\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "{'input': 'Retrieve relevant documents for: where Krishna was working on 2012',\n", + " 'output': 'Based on the provided information, it appears that Krishna Dipayan Bhunia was working as a Graduate Engineer Trainee in Godrej & Boyce in the CRM domain from October 2012 to September 2013.'}" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tools = [retrieve_documents]\n", + "query = \"where Krishna was working on 2012\"\n", + "\n", + "agent = create_tool_calling_agent(llm, tools, prompt)\n", + "agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)\n", + "agent_executor.invoke({\"input\": f\"Retrieve relevant documents for: {query}\"})\n" + ] } ], "metadata": { diff --git a/requirements.txt b/requirements.txt index 5e356844..dc732283 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ -langchain_grog \ No newline at end of file +langchain_groq +langchain_huggingface \ No newline at end of file From 75dfb6515b245f2e6cf395f48b79afc78e34fcb4 Mon Sep 17 00:00:00 2001 From: Krishna Bhunia Date: Tue, 15 Oct 2024 12:22:49 +0530 Subject: [PATCH 4/9] code --- code/nb_files/rag2.ipynb | 14 +- code/nb_files/rag2_pdf.ipynb | 289 +++++++++++++++++++++++++++++++++++ 2 files changed, 291 insertions(+), 12 deletions(-) create mode 100644 code/nb_files/rag2_pdf.ipynb diff --git a/code/nb_files/rag2.ipynb b/code/nb_files/rag2.ipynb index c9a69cab..07c6cbf0 100644 --- a/code/nb_files/rag2.ipynb +++ b/code/nb_files/rag2.ipynb @@ -2,19 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 60, + "execution_count": 1, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n", - "To disable this warning, you can either:\n", - "\t- Avoid using `tokenizers` before the fork if possible\n", - "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n" - ] - }, { "name": "stdout", "output_type": "stream", @@ -50,7 +40,7 @@ } ], "source": [ - "! pip install langchain_groq\n" + "! pip install langchain_groq" ] }, { diff --git a/code/nb_files/rag2_pdf.ipynb b/code/nb_files/rag2_pdf.ipynb new file mode 100644 index 00000000..07c6cbf0 --- /dev/null +++ b/code/nb_files/rag2_pdf.ipynb @@ -0,0 +1,289 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: langchain_groq in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (0.2.0)\n", + "Requirement already satisfied: groq<1,>=0.4.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain_groq) (0.11.0)\n", + "Requirement already satisfied: langchain-core<0.4,>=0.3 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain_groq) (0.3.9)\n", + "Requirement already satisfied: anyio<5,>=3.5.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (4.6.0)\n", + "Requirement already satisfied: distro<2,>=1.7.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (1.9.0)\n", + "Requirement already satisfied: httpx<1,>=0.23.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (0.27.2)\n", + "Requirement already satisfied: pydantic<3,>=1.9.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (2.9.2)\n", + "Requirement already satisfied: sniffio in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (1.3.1)\n", + "Requirement already satisfied: typing-extensions<5,>=4.7 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (4.12.2)\n", + "Requirement already satisfied: PyYAML>=5.3 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (6.0.2)\n", + "Requirement already satisfied: jsonpatch<2.0,>=1.33 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (1.33)\n", + "Requirement already satisfied: langsmith<0.2.0,>=0.1.125 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (0.1.132)\n", + "Requirement already satisfied: packaging<25,>=23.2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (24.1)\n", + "Requirement already satisfied: tenacity!=8.4.0,<9.0.0,>=8.1.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (8.5.0)\n", + "Requirement already satisfied: idna>=2.8 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from anyio<5,>=3.5.0->groq<1,>=0.4.1->langchain_groq) (3.10)\n", + "Requirement already satisfied: exceptiongroup>=1.0.2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from anyio<5,>=3.5.0->groq<1,>=0.4.1->langchain_groq) (1.2.2)\n", + "Requirement already satisfied: certifi in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain_groq) (2024.8.30)\n", + "Requirement already satisfied: httpcore==1.* in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain_groq) (1.0.6)\n", + "Requirement already satisfied: h11<0.15,>=0.13 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain_groq) (0.14.0)\n", + "Requirement already satisfied: jsonpointer>=1.9 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from jsonpatch<2.0,>=1.33->langchain-core<0.4,>=0.3->langchain_groq) (3.0.0)\n", + "Requirement already satisfied: orjson<4.0.0,>=3.9.14 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (3.10.7)\n", + "Requirement already satisfied: requests<3,>=2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (2.32.3)\n", + "Requirement already satisfied: requests-toolbelt<2.0.0,>=1.0.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (1.0.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from pydantic<3,>=1.9.0->groq<1,>=0.4.1->langchain_groq) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.23.4 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from pydantic<3,>=1.9.0->groq<1,>=0.4.1->langchain_groq) (2.23.4)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests<3,>=2->langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (3.3.2)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests<3,>=2->langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (2.2.3)\n" + ] + } + ], + "source": [ + "! pip install langchain_groq" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_core.tools import tool\n", + "\n", + "from langchain.agents import create_tool_calling_agent\n", + "from langchain.agents import AgentExecutor\n", + "\n", + "from langchain_groq import ChatGroq\n", + "\n", + "from langchain_core.prompts import ChatPromptTemplate\n", + "from dotenv import load_dotenv\n", + "\n", + "load_dotenv()\n", + "\n", + "from langchain_community.vectorstores import FAISS\n", + "from langchain_huggingface import HuggingFaceEmbeddings\n", + "from langchain_community.document_loaders import TextLoader\n", + "from langchain.text_splitter import CharacterTextSplitter\n" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [], + "source": [ + "# Load documents\n", + "loader = TextLoader(\"langdoc.txt\")\n", + "documents = loader.load()\n", + "\n", + "# Split text into chunks\n", + "text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)\n", + "texts = text_splitter.split_documents(documents)\n", + "\n", + "embedding_model_name = \"sentence-transformers/all-MiniLM-L6-v2\"\n", + "embeddings = HuggingFaceEmbeddings(model_name=embedding_model_name)\n", + "\n", + "vector_store = FAISS.from_documents(texts, embeddings)\n", + "retriever = vector_store.as_retriever()\n", + "prompt = ChatPromptTemplate.from_messages(\n", + " [\n", + " (\"system\", \"You are a helpful assistant\"),\n", + " (\"placeholder\", \"{chat_history}\"),\n", + " (\"human\", \"{input}\"),\n", + " (\"placeholder\", \"{agent_scratchpad}\")\n", + " ]\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "# llm = ChatGroq(\n", + "# model=\"mixtral-8x7b-32768\",\n", + "# temperature=0,\n", + "# max_tokens=None,\n", + "# timeout=None,\n", + "# max_retries=2\n", + "# )\n", + "\n", + "llm = ChatGroq(model=\"llama3-70b-8192\", temperature=1)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "@tool\n", + "def retrieve_documents(query: str) -> str:\n", + " \"\"\"Retrieve relevant documents based on the query\"\"\"\n", + " docs = retriever.invoke(query)\n", + " return \"\\n\".join([doc.page_content for doc in docs])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `retrieve_documents` with `{'query': 'who is Krishna?'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3m\n", + "Invoking: `retrieve_documents` with `{'query': 'Krishna'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mIt seems like the retrieved document is not about the mythological figure Krishna, but rather a software engineer with the same name. If you are looking for information about the mythological figure Krishna, I can try to assist you with that.\n", + "\n", + "Krishna is a major deity in Hinduism and is considered to be the eighth avatar (incarnation) of Lord Vishnu. He is often depicted as a blue-skinned god holding a flute and is known for his wisdom, bravery, and divine love. Krishna is said to have lived in the city of Dwarka and is believed to have played a key role in the Mahabharata, an ancient Indian epic.\n", + "\n", + "Would you like to know more about Krishna's life, teachings, or his role in Hindu mythology?\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "{'input': 'Retrieve relevant documents for: who is Krishna?',\n", + " 'output': \"It seems like the retrieved document is not about the mythological figure Krishna, but rather a software engineer with the same name. If you are looking for information about the mythological figure Krishna, I can try to assist you with that.\\n\\nKrishna is a major deity in Hinduism and is considered to be the eighth avatar (incarnation) of Lord Vishnu. He is often depicted as a blue-skinned god holding a flute and is known for his wisdom, bravery, and divine love. Krishna is said to have lived in the city of Dwarka and is believed to have played a key role in the Mahabharata, an ancient Indian epic.\\n\\nWould you like to know more about Krishna's life, teachings, or his role in Hindu mythology?\"}" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tools = [retrieve_documents]\n", + "query = \"who is Krishna?\"\n", + "\n", + "agent = create_tool_calling_agent(llm, tools, prompt)\n", + "agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)\n", + "agent_executor.invoke({\"input\": f\"Retrieve relevant documents for: {query}\"})\n" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `retrieve_documents` with `{'query': 'where Krishna works'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mTool use failed: no tool can be called with name extract_answer\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "{'input': 'Retrieve relevant documents for: Pls answer in one word, where Krishna works?',\n", + " 'output': 'Tool use failed: no tool can be called with name extract_answer'}" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tools = [retrieve_documents]\n", + "query = \"Pls answer in one word, where Krishna works?\"\n", + "\n", + "agent = create_tool_calling_agent(llm, tools, prompt)\n", + "agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)\n", + "agent_executor.invoke({\"input\": f\"Retrieve relevant documents for: {query}\"})\n" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `retrieve_documents` with `{'query': 'Krishna was working on 2012'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3m\n", + "Invoking: `retrieve_documents` with `{'query': 'Krishna DIPAYAN BHUNIA working experience in 2012'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mBased on the provided information, it appears that Krishna Dipayan Bhunia was working as a Graduate Engineer Trainee in Godrej & Boyce in the CRM domain from October 2012 to September 2013.\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "{'input': 'Retrieve relevant documents for: where Krishna was working on 2012',\n", + " 'output': 'Based on the provided information, it appears that Krishna Dipayan Bhunia was working as a Graduate Engineer Trainee in Godrej & Boyce in the CRM domain from October 2012 to September 2013.'}" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tools = [retrieve_documents]\n", + "query = \"where Krishna was working on 2012\"\n", + "\n", + "agent = create_tool_calling_agent(llm, tools, prompt)\n", + "agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)\n", + "agent_executor.invoke({\"input\": f\"Retrieve relevant documents for: {query}\"})\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "venv_kri_mes", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 3e7b35f8a50bf68e3492173048b82bd726ed565e Mon Sep 17 00:00:00 2001 From: Krishna Bhunia Date: Tue, 15 Oct 2024 12:28:28 +0530 Subject: [PATCH 5/9] change in doc file --- code/nb_files/krishna_doc.txt | 3 + code/nb_files/langdoc.txt | 1 - code/nb_files/rag2.ipynb | 73 +-- code/nb_files/rag2_pdf.ipynb | 839 ++++++++++++++++++++++++++++++++-- requirements.txt | 6 +- 5 files changed, 841 insertions(+), 81 deletions(-) create mode 100644 code/nb_files/krishna_doc.txt delete mode 100644 code/nb_files/langdoc.txt diff --git a/code/nb_files/krishna_doc.txt b/code/nb_files/krishna_doc.txt new file mode 100644 index 00000000..5b2f1b2f --- /dev/null +++ b/code/nb_files/krishna_doc.txt @@ -0,0 +1,3 @@ +Krishna Dipayan Bhunia is a Senior Software Engineer. +He works in Capgemini as a Senior Data Engineer. +In 2012 he was working for Godrej and Boyce as Full stack Developer. diff --git a/code/nb_files/langdoc.txt b/code/nb_files/langdoc.txt deleted file mode 100644 index 7a887f00..00000000 --- a/code/nb_files/langdoc.txt +++ /dev/null @@ -1 +0,0 @@ -KRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers diff --git a/code/nb_files/rag2.ipynb b/code/nb_files/rag2.ipynb index 07c6cbf0..70fad8cf 100644 --- a/code/nb_files/rag2.ipynb +++ b/code/nb_files/rag2.ipynb @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -69,12 +69,21 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages/sentence_transformers/cross_encoder/CrossEncoder.py:13: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from tqdm.autonotebook import tqdm, trange\n" + ] + } + ], "source": [ "# Load documents\n", - "loader = TextLoader(\"langdoc.txt\")\n", + "loader = TextLoader(\"krishna_doc.txt\")\n", "documents = loader.load()\n", "\n", "# Split text into chunks\n", @@ -98,24 +107,24 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ - "# llm = ChatGroq(\n", - "# model=\"mixtral-8x7b-32768\",\n", - "# temperature=0,\n", - "# max_tokens=None,\n", - "# timeout=None,\n", - "# max_retries=2\n", - "# )\n", + "llm = ChatGroq(\n", + " model=\"mixtral-8x7b-32768\",\n", + " temperature=0,\n", + " max_tokens=None,\n", + " timeout=None,\n", + " max_retries=2\n", + ")\n", "\n", - "llm = ChatGroq(model=\"llama3-70b-8192\", temperature=1)\n" + "# llm = ChatGroq(model=\"llama3-70b-8192\", temperature=1)\n" ] }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -128,7 +137,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -146,11 +155,7 @@ "Invoking: `retrieve_documents` with `{'query': 'Krishna'}`\n", "\n", "\n", - "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mIt seems like the retrieved document is not about the mythological figure Krishna, but rather a software engineer with the same name. If you are looking for information about the mythological figure Krishna, I can try to assist you with that.\n", - "\n", - "Krishna is a major deity in Hinduism and is considered to be the eighth avatar (incarnation) of Lord Vishnu. He is often depicted as a blue-skinned god holding a flute and is known for his wisdom, bravery, and divine love. Krishna is said to have lived in the city of Dwarka and is believed to have played a key role in the Mahabharata, an ancient Indian epic.\n", - "\n", - "Would you like to know more about Krishna's life, teachings, or his role in Hindu mythology?\u001b[0m\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mThe text you provided appears to be a resume or a professional profile of someone named Krishna Dipayan Bhunia, who is a software engineer and data engineer with expertise in Python, data analysis, and visualization. However, this does not seem to be related to the Hindu deity Krishna. If you are looking for information on the Hindu deity Krishna, I'd be happy to provide that. Krishna is a major deity in Hinduism and is considered the eighth avatar, or incarnation, of the god Vishnu. He is known for his wisdom, courage, and divine power.\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -159,10 +164,10 @@ "data": { "text/plain": [ "{'input': 'Retrieve relevant documents for: who is Krishna?',\n", - " 'output': \"It seems like the retrieved document is not about the mythological figure Krishna, but rather a software engineer with the same name. If you are looking for information about the mythological figure Krishna, I can try to assist you with that.\\n\\nKrishna is a major deity in Hinduism and is considered to be the eighth avatar (incarnation) of Lord Vishnu. He is often depicted as a blue-skinned god holding a flute and is known for his wisdom, bravery, and divine love. Krishna is said to have lived in the city of Dwarka and is believed to have played a key role in the Mahabharata, an ancient Indian epic.\\n\\nWould you like to know more about Krishna's life, teachings, or his role in Hindu mythology?\"}" + " 'output': \"The text you provided appears to be a resume or a professional profile of someone named Krishna Dipayan Bhunia, who is a software engineer and data engineer with expertise in Python, data analysis, and visualization. However, this does not seem to be related to the Hindu deity Krishna. If you are looking for information on the Hindu deity Krishna, I'd be happy to provide that. Krishna is a major deity in Hinduism and is considered the eighth avatar, or incarnation, of the god Vishnu. He is known for his wisdom, courage, and divine power.\"}" ] }, - "execution_count": 65, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -178,7 +183,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -189,10 +194,10 @@ "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\u001b[32;1m\u001b[1;3m\n", - "Invoking: `retrieve_documents` with `{'query': 'where Krishna works'}`\n", + "Invoking: `retrieve_documents` with `{'query': 'Krishna works'}`\n", "\n", "\n", - "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mTool use failed: no tool can be called with name extract_answer\u001b[0m\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mTool use failed: no tool can be called with name answer_query\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -201,10 +206,10 @@ "data": { "text/plain": [ "{'input': 'Retrieve relevant documents for: Pls answer in one word, where Krishna works?',\n", - " 'output': 'Tool use failed: no tool can be called with name extract_answer'}" + " 'output': 'Tool use failed: no tool can be called with name answer_query'}" ] }, - "execution_count": 66, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -220,7 +225,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -231,14 +236,10 @@ "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\u001b[32;1m\u001b[1;3m\n", - "Invoking: `retrieve_documents` with `{'query': 'Krishna was working on 2012'}`\n", - "\n", - "\n", - "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3m\n", - "Invoking: `retrieve_documents` with `{'query': 'Krishna DIPAYAN BHUNIA working experience in 2012'}`\n", + "Invoking: `retrieve_documents` with `{'query': 'where Krishna was working on 2012'}`\n", "\n", "\n", - "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mBased on the provided information, it appears that Krishna Dipayan Bhunia was working as a Graduate Engineer Trainee in Godrej & Boyce in the CRM domain from October 2012 to September 2013.\u001b[0m\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mBased on the retrieved document, it appears that Krishna was working as a Senior Data Engineer in Capgemini from October 2021 to present, and prior to that, he worked in various roles in different companies including Larsen and Toubro Technological Services, Quantum Mutual Fund, Smart Solutions, and Godrej & Boyce, starting from October 2012.\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -247,10 +248,10 @@ "data": { "text/plain": [ "{'input': 'Retrieve relevant documents for: where Krishna was working on 2012',\n", - " 'output': 'Based on the provided information, it appears that Krishna Dipayan Bhunia was working as a Graduate Engineer Trainee in Godrej & Boyce in the CRM domain from October 2012 to September 2013.'}" + " 'output': 'Based on the retrieved document, it appears that Krishna was working as a Senior Data Engineer in Capgemini from October 2021 to present, and prior to that, he worked in various roles in different companies including Larsen and Toubro Technological Services, Quantum Mutual Fund, Smart Solutions, and Godrej & Boyce, starting from October 2012.'}" ] }, - "execution_count": 67, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } diff --git a/code/nb_files/rag2_pdf.ipynb b/code/nb_files/rag2_pdf.ipynb index 07c6cbf0..5f0c332d 100644 --- a/code/nb_files/rag2_pdf.ipynb +++ b/code/nb_files/rag2_pdf.ipynb @@ -2,9 +2,19 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 34, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n", + "To disable this warning, you can either:\n", + "\t- Avoid using `tokenizers` before the fork if possible\n", + "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n" + ] + }, { "name": "stdout", "output_type": "stream", @@ -37,25 +47,39 @@ "Requirement already satisfied: charset-normalizer<4,>=2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests<3,>=2->langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (3.3.2)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests<3,>=2->langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (2.2.3)\n" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n", + "To disable this warning, you can either:\n", + "\t- Avoid using `tokenizers` before the fork if possible\n", + "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: pymupdf in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (1.24.11)\n" + ] } ], "source": [ - "! pip install langchain_groq" + "! pip install langchain_groq\n", + "! pip install pymupdf\n" ] }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "from langchain_core.tools import tool\n", - "\n", - "from langchain.agents import create_tool_calling_agent\n", - "from langchain.agents import AgentExecutor\n", - "\n", + "from langchain.agents import create_tool_calling_agent, AgentExecutor\n", "from langchain_groq import ChatGroq\n", - "\n", "from langchain_core.prompts import ChatPromptTemplate\n", "from dotenv import load_dotenv\n", "\n", @@ -64,18 +88,20 @@ "from langchain_community.vectorstores import FAISS\n", "from langchain_huggingface import HuggingFaceEmbeddings\n", "from langchain_community.document_loaders import TextLoader\n", - "from langchain.text_splitter import CharacterTextSplitter\n" + "from langchain.text_splitter import CharacterTextSplitter\n", + "\n", + "from langchain_community.document_loaders import PyMuPDFLoader" ] }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "# Load documents\n", - "loader = TextLoader(\"langdoc.txt\")\n", - "documents = loader.load()\n", + "pdf_loader = PyMuPDFLoader(\"krishna_resume.pdf\")\n", + "documents = pdf_loader.load()\n", "\n", "# Split text into chunks\n", "text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)\n", @@ -98,24 +124,25 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ - "# llm = ChatGroq(\n", - "# model=\"mixtral-8x7b-32768\",\n", - "# temperature=0,\n", - "# max_tokens=None,\n", - "# timeout=None,\n", - "# max_retries=2\n", - "# )\n", + "llm = ChatGroq(\n", + " model=\"mixtral-8x7b-32768\",\n", + " temperature=0,\n", + " max_tokens=None,\n", + " timeout=None,\n", + " max_retries=2\n", + ")\n", + "\n", "\n", - "llm = ChatGroq(model=\"llama3-70b-8192\", temperature=1)\n" + "# llm = ChatGroq(model=\"llama3-70b-8192\", temperature=1)" ] }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -128,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 39, "metadata": {}, "outputs": [ { @@ -139,18 +166,186 @@ "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\u001b[32;1m\u001b[1;3m\n", - "Invoking: `retrieve_documents` with `{'query': 'who is Krishna?'}`\n", + "Invoking: `retrieve_documents` with `{'query': 'who is Krishna'}`\n", "\n", "\n", - "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3m\n", - "Invoking: `retrieve_documents` with `{'query': 'Krishna'}`\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA \n", + "Senior Software Engineer | Senior Data Engineer | Python Developer \n", + "+91 865 200 7894 \n", + " \n", + "Github Link \n", + "LinkedIn \n", + " \n", + "kri.career@gmail.com \n", + "SUMMARY \n", + "● Seasoned Software Engineer/Full Stack Developer with 12+ years of experience across industries like CRM, Oil & Gas, Financial, and FMCG. Over \n", + "6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. \n", + "● Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used \n", + "Python libraries such as NumPy, and Pandas for advanced data analysis and engineering stuff. \n", + "● Experienced in designing software solutions using Python, C#, and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization \n", + "(Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively. \n", + "EDUCATION \n", + "● M.TECH (Computer Eng. with Specialization in Software Eng.) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Aug 2016 – Jun 2018 \n", + "Veermata Jijabai Technological Institute (VJTI), Mumbai \n", + "● B.E Computer Engineering (University of Mumbai) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Aug 2008 – Jun 2012 \n", + "TECHNICAL SKILLS \n", + "● Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github. \n", + "● Data Engineering & Analysis: Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, \n", + "Data Visualization, Statistics, AWS (Amazon Web Services), Azure. \n", + "● Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c. \n", + "● Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture. \n", + "WORK EXPERIENCE & PROJECTS \n", + "Senior Data Engineer in Capgemini \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Oct 2021 – Present \n", + "Client - P&G(Procter & Gamble) - (Role - Data Engineer, Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Pune(Remote) \n", + "● Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub. \n", + "● Proficient in Python for data engineering pipelines. \n", + "● Experienced with Pandas, NumPy for data processing and analysis. \n", + "● Skilled in client communication to gather data and project requirements. \n", + "● Set up and configured Azure pipelines for CI/CD of data pipelines. \n", + "● Created and optimized MS-SQL tables for efficient data storage. \n", + "● Populated metrics to Grafana Dashboard from manufacturing data. \n", + "● Designed ETL pipelines for data extraction from various sources. \n", + "● Applied statistical techniques and optimization for data contextualization. \n", + "● Delivered pipelines for leakage, defect detection, and insights. \n", + "Key Achievement - With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves \n", + "the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half \n", + "of the previous defects identified. \n", + "Software Engineer and Data Analyst in Larsen and Toubro Technological Services worked in Oil & Gas Domain \n", + " \n", + "Jan 2020 – Oct 2021 \n", + " (Role – Data Engineer, Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Vadodara \n", + " (Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11G and Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)). \n", + "Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)] \n", + "● Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plant portal, finding different \n", + "equipment properties in plant portal, Different levels of data missing. Different file formats, Segregation and separation of different language \n", + "formats, metadata, and migrated documents in smart plant portal). \n", + "● Used Task, Thread and Parallel process and optimized codes with Singleton and Factory Design pattern. Excel dynamic read and write with \n", + "formatting using closedXML, OpenXML, EPPlus, Excel Data Reader. \n", + "● Key Achievement – Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time. \n", + "SPI (Smart Plant Integration) and SPEC [ Covestro, IPEP (Data analytics team)] \n", + "● Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. \n", + "Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized \n", + "arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view \n", + "sync. Comparison checks for BLOB data and other Hash File data. \n", + "● Implemented Task, Thread and Parallel process and optimized codes with Singleton and Factory Design pattern. Excel dynamic read and write \n", + "with formatting using closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames. \n", + "● Key Achievement – With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely \n", + "with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their \n", + "individual data conversion and wrangling problems. \n", + "Software Engineer in Quantum Mutual Fund worked in Financial Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Aug 2018 - Jan 2020 \n", + "(Role – Full Stack Developer/ Data Engineer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumba \n", + "Invest Online (INON) - Backend Developer \n", + "● Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP. \n", + "● Optimized backend SQL code for Investors, used to do KYC according to their citizenship with different criteria & process form in different queues. \n", + "Software Engineer in Smart Solutions worked in CRM, FMCG Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Oct 2013 - July 2018 \n", + "(Role – Full Stack Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumbai \n", + "Inventory management and services - Backend Developer \n", + "● Capturing, managing, and maintaining inventories and managing. Assigning blocks and holding inventories. \n", + "Graduate Engineer Trainee in Godrej & Boyce worked in CRM Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Oct 2012 - Sept 2013 \n", + "(Role – Full Stack Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumbai \n", + "Timespan- Attendance and Leave management system, Assets management system & Drawer depository safe - Application \n", + "● Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to \n", + "standard format. \n", + "CERTIFICATION AND LINKS (Recent) \n", + "● LinkedIn & Pluralsight Certificates - #Using Python with Excel #Data Wrangling with Pandas for Data Engineers\u001b[0m\u001b[32;1m\u001b[1;3mKrishna Dipayan Bhunia is a Senior Software Engineer and Data Engineer with 12+ years of experience across various industries such as CRM, Oil & Gas, Financial, and FMCG. He specializes in data engineering, analysis, and visualization with over 6 years of expertise in Python. Krishna has a strong background in writing clean, production-level Python code and is proficient in various programming languages, frameworks, and databases.\n", "\n", + "He has worked on multiple projects, including his current role as a Senior Data Engineer at Capgemini for P&G, where he has been responsible for data engineering pipelines, data processing and analysis, client communication, and ETL pipelines for data extraction from various sources. Krishna has also worked as a Software Engineer and Data Analyst in the Oil & Gas domain at Larsen and Toubro Technological Services, where he implemented data analysis processes and optimized codes using various tools and libraries.\n", "\n", - "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mIt seems like the retrieved document is not about the mythological figure Krishna, but rather a software engineer with the same name. If you are looking for information about the mythological figure Krishna, I can try to assist you with that.\n", + "Krishna has a Master of Technology degree in Computer Engineering with a specialization in Software Engineering from Veermata Jijabai Technological Institute (VJTI), Mumbai, and a Bachelor of Engineering degree in Computer Engineering from the University of Mumbai. He has also earned certifications from LinkedIn and Pluralsight for using Python with Excel and data wrangling with Pandas for Data Engineers.\n", "\n", - "Krishna is a major deity in Hinduism and is considered to be the eighth avatar (incarnation) of Lord Vishnu. He is often depicted as a blue-skinned god holding a flute and is known for his wisdom, bravery, and divine love. Krishna is said to have lived in the city of Dwarka and is believed to have played a key role in the Mahabharata, an ancient Indian epic.\n", - "\n", - "Would you like to know more about Krishna's life, teachings, or his role in Hindu mythology?\u001b[0m\n", + "In summary, Krishna Dipayan Bhunia is a highly skilled and experienced Senior Software Engineer and Data Engineer with a strong background in Python and data engineering. He has a proven track record of delivering high-quality solutions and working closely with cross-functional teams to design, build, and deliver end-to-end solutions.\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -159,10 +354,10 @@ "data": { "text/plain": [ "{'input': 'Retrieve relevant documents for: who is Krishna?',\n", - " 'output': \"It seems like the retrieved document is not about the mythological figure Krishna, but rather a software engineer with the same name. If you are looking for information about the mythological figure Krishna, I can try to assist you with that.\\n\\nKrishna is a major deity in Hinduism and is considered to be the eighth avatar (incarnation) of Lord Vishnu. He is often depicted as a blue-skinned god holding a flute and is known for his wisdom, bravery, and divine love. Krishna is said to have lived in the city of Dwarka and is believed to have played a key role in the Mahabharata, an ancient Indian epic.\\n\\nWould you like to know more about Krishna's life, teachings, or his role in Hindu mythology?\"}" + " 'output': 'Krishna Dipayan Bhunia is a Senior Software Engineer and Data Engineer with 12+ years of experience across various industries such as CRM, Oil & Gas, Financial, and FMCG. He specializes in data engineering, analysis, and visualization with over 6 years of expertise in Python. Krishna has a strong background in writing clean, production-level Python code and is proficient in various programming languages, frameworks, and databases.\\n\\nHe has worked on multiple projects, including his current role as a Senior Data Engineer at Capgemini for P&G, where he has been responsible for data engineering pipelines, data processing and analysis, client communication, and ETL pipelines for data extraction from various sources. Krishna has also worked as a Software Engineer and Data Analyst in the Oil & Gas domain at Larsen and Toubro Technological Services, where he implemented data analysis processes and optimized codes using various tools and libraries.\\n\\nKrishna has a Master of Technology degree in Computer Engineering with a specialization in Software Engineering from Veermata Jijabai Technological Institute (VJTI), Mumbai, and a Bachelor of Engineering degree in Computer Engineering from the University of Mumbai. He has also earned certifications from LinkedIn and Pluralsight for using Python with Excel and data wrangling with Pandas for Data Engineers.\\n\\nIn summary, Krishna Dipayan Bhunia is a highly skilled and experienced Senior Software Engineer and Data Engineer with a strong background in Python and data engineering. He has a proven track record of delivering high-quality solutions and working closely with cross-functional teams to design, build, and deliver end-to-end solutions.'}" ] }, - "execution_count": 65, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -178,7 +373,223 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `retrieve_documents` with `{'query': \"Krishna's company\"}`\n", + "\n", + "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA \n", + "Senior Software Engineer | Senior Data Engineer | Python Developer \n", + "+91 865 200 7894 \n", + " \n", + "Github Link \n", + "LinkedIn \n", + " \n", + "kri.career@gmail.com \n", + "SUMMARY \n", + "● Seasoned Software Engineer/Full Stack Developer with 12+ years of experience across industries like CRM, Oil & Gas, Financial, and FMCG. Over \n", + "6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. \n", + "● Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used \n", + "Python libraries such as NumPy, and Pandas for advanced data analysis and engineering stuff. \n", + "● Experienced in designing software solutions using Python, C#, and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization \n", + "(Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively. \n", + "EDUCATION \n", + "● M.TECH (Computer Eng. with Specialization in Software Eng.) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Aug 2016 – Jun 2018 \n", + "Veermata Jijabai Technological Institute (VJTI), Mumbai \n", + "● B.E Computer Engineering (University of Mumbai) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Aug 2008 – Jun 2012 \n", + "TECHNICAL SKILLS \n", + "● Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github. \n", + "● Data Engineering & Analysis: Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, \n", + "Data Visualization, Statistics, AWS (Amazon Web Services), Azure. \n", + "● Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c. \n", + "● Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture. \n", + "WORK EXPERIENCE & PROJECTS \n", + "Senior Data Engineer in Capgemini \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Oct 2021 – Present \n", + "Client - P&G(Procter & Gamble) - (Role - Data Engineer, Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Pune(Remote) \n", + "● Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub. \n", + "● Proficient in Python for data engineering pipelines. \n", + "● Experienced with Pandas, NumPy for data processing and analysis. \n", + "● Skilled in client communication to gather data and project requirements. \n", + "● Set up and configured Azure pipelines for CI/CD of data pipelines. \n", + "● Created and optimized MS-SQL tables for efficient data storage. \n", + "● Populated metrics to Grafana Dashboard from manufacturing data. \n", + "● Designed ETL pipelines for data extraction from various sources. \n", + "● Applied statistical techniques and optimization for data contextualization. \n", + "● Delivered pipelines for leakage, defect detection, and insights. \n", + "Key Achievement - With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves \n", + "the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half \n", + "of the previous defects identified. \n", + "Software Engineer and Data Analyst in Larsen and Toubro Technological Services worked in Oil & Gas Domain \n", + " \n", + "Jan 2020 – Oct 2021 \n", + " (Role – Data Engineer, Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Vadodara \n", + " (Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11G and Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)). \n", + "Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)] \n", + "● Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plant portal, finding different \n", + "equipment properties in plant portal, Different levels of data missing. Different file formats, Segregation and separation of different language \n", + "formats, metadata, and migrated documents in smart plant portal). \n", + "● Used Task, Thread and Parallel process and optimized codes with Singleton and Factory Design pattern. Excel dynamic read and write with \n", + "formatting using closedXML, OpenXML, EPPlus, Excel Data Reader. \n", + "● Key Achievement – Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time. \n", + "SPI (Smart Plant Integration) and SPEC [ Covestro, IPEP (Data analytics team)] \n", + "● Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. \n", + "Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized \n", + "arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view \n", + "sync. Comparison checks for BLOB data and other Hash File data. \n", + "● Implemented Task, Thread and Parallel process and optimized codes with Singleton and Factory Design pattern. Excel dynamic read and write \n", + "with formatting using closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames. \n", + "● Key Achievement – With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely \n", + "with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their \n", + "individual data conversion and wrangling problems. \n", + "Software Engineer in Quantum Mutual Fund worked in Financial Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Aug 2018 - Jan 2020 \n", + "(Role – Full Stack Developer/ Data Engineer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumba \n", + "Invest Online (INON) - Backend Developer \n", + "● Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP. \n", + "● Optimized backend SQL code for Investors, used to do KYC according to their citizenship with different criteria & process form in different queues. \n", + "Software Engineer in Smart Solutions worked in CRM, FMCG Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Oct 2013 - July 2018 \n", + "(Role – Full Stack Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumbai \n", + "Inventory management and services - Backend Developer \n", + "● Capturing, managing, and maintaining inventories and managing. Assigning blocks and holding inventories. \n", + "Graduate Engineer Trainee in Godrej & Boyce worked in CRM Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Oct 2012 - Sept 2013 \n", + "(Role – Full Stack Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumbai \n", + "Timespan- Attendance and Leave management system, Assets management system & Drawer depository safe - Application \n", + "● Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to \n", + "standard format. \n", + "CERTIFICATION AND LINKS (Recent) \n", + "● LinkedIn & Pluralsight Certificates - #Using Python with Excel #Data Wrangling with Pandas for Data Engineers\u001b[0m\u001b[32;1m\u001b[1;3mBased on the information provided by the tool, Krishna Dipayan Bhunia works as a Senior Data Engineer at Capgemini, serving the client Procter & Gamble (P&G). Krishna's work involves data engineering pipelines using Python, Pandas, NumPy, MS-SQL 2022, Azure, and Docker. One of Krishna's key achievements at Capgemini includes reducing defects and leakages in product manufacturing by half by efficiently contextualizing data from multiple sources.\n", + "\n", + "Previously, Krishna worked as a Software Engineer and Data Analyst at Larsen and Toubro Technological Services in the Oil & Gas domain, where Krishna implemented data analysis processes and optimized code using various tools and libraries. Krishna also has experience as a Full Stack Developer and Data Engineer at Quantum Mutual Fund in the Financial domain and Smart Solutions in the CRM and FMCG domains.\n", + "\n", + "Krishna has a strong background in technical skills, including programming languages, data engineering & analysis, databases, and expertise in DSA, algorithm analysis, and distributed systems. Krishna holds a Master of Technology in Computer Engineering with a specialization in Software Engineering from Veermata Jijabai Technological Institute (VJTI), Mumbai, and a Bachelor of Engineering in Computer Engineering from the University of Mumbai. Krishna also has recent certifications from LinkedIn and Pluralsight related to Python and data wrangling.\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "{'input': 'Retrieve relevant documents for: In which company Krishna works?',\n", + " 'output': \"Based on the information provided by the tool, Krishna Dipayan Bhunia works as a Senior Data Engineer at Capgemini, serving the client Procter & Gamble (P&G). Krishna's work involves data engineering pipelines using Python, Pandas, NumPy, MS-SQL 2022, Azure, and Docker. One of Krishna's key achievements at Capgemini includes reducing defects and leakages in product manufacturing by half by efficiently contextualizing data from multiple sources.\\n\\nPreviously, Krishna worked as a Software Engineer and Data Analyst at Larsen and Toubro Technological Services in the Oil & Gas domain, where Krishna implemented data analysis processes and optimized code using various tools and libraries. Krishna also has experience as a Full Stack Developer and Data Engineer at Quantum Mutual Fund in the Financial domain and Smart Solutions in the CRM and FMCG domains.\\n\\nKrishna has a strong background in technical skills, including programming languages, data engineering & analysis, databases, and expertise in DSA, algorithm analysis, and distributed systems. Krishna holds a Master of Technology in Computer Engineering with a specialization in Software Engineering from Veermata Jijabai Technological Institute (VJTI), Mumbai, and a Bachelor of Engineering in Computer Engineering from the University of Mumbai. Krishna also has recent certifications from LinkedIn and Pluralsight related to Python and data wrangling.\"}" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tools = [retrieve_documents]\n", + "query = \"In which company Krishna works?\"\n", + "\n", + "agent = create_tool_calling_agent(llm, tools, prompt)\n", + "agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)\n", + "agent_executor.invoke({\"input\": f\"Retrieve relevant documents for: {query}\"})" + ] + }, + { + "cell_type": "code", + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -192,7 +603,177 @@ "Invoking: `retrieve_documents` with `{'query': 'where Krishna works'}`\n", "\n", "\n", - "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mTool use failed: no tool can be called with name extract_answer\u001b[0m\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA \n", + "Senior Software Engineer | Senior Data Engineer | Python Developer \n", + "+91 865 200 7894 \n", + " \n", + "Github Link \n", + "LinkedIn \n", + " \n", + "kri.career@gmail.com \n", + "SUMMARY \n", + "● Seasoned Software Engineer/Full Stack Developer with 12+ years of experience across industries like CRM, Oil & Gas, Financial, and FMCG. Over \n", + "6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. \n", + "● Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used \n", + "Python libraries such as NumPy, and Pandas for advanced data analysis and engineering stuff. \n", + "● Experienced in designing software solutions using Python, C#, and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization \n", + "(Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively. \n", + "EDUCATION \n", + "● M.TECH (Computer Eng. with Specialization in Software Eng.) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Aug 2016 – Jun 2018 \n", + "Veermata Jijabai Technological Institute (VJTI), Mumbai \n", + "● B.E Computer Engineering (University of Mumbai) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Aug 2008 – Jun 2012 \n", + "TECHNICAL SKILLS \n", + "● Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github. \n", + "● Data Engineering & Analysis: Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, \n", + "Data Visualization, Statistics, AWS (Amazon Web Services), Azure. \n", + "● Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c. \n", + "● Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture. \n", + "WORK EXPERIENCE & PROJECTS \n", + "Senior Data Engineer in Capgemini \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Oct 2021 – Present \n", + "Client - P&G(Procter & Gamble) - (Role - Data Engineer, Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Pune(Remote) \n", + "● Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub. \n", + "● Proficient in Python for data engineering pipelines. \n", + "● Experienced with Pandas, NumPy for data processing and analysis. \n", + "● Skilled in client communication to gather data and project requirements. \n", + "● Set up and configured Azure pipelines for CI/CD of data pipelines. \n", + "● Created and optimized MS-SQL tables for efficient data storage. \n", + "● Populated metrics to Grafana Dashboard from manufacturing data. \n", + "● Designed ETL pipelines for data extraction from various sources. \n", + "● Applied statistical techniques and optimization for data contextualization. \n", + "● Delivered pipelines for leakage, defect detection, and insights. \n", + "Key Achievement - With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves \n", + "the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half \n", + "of the previous defects identified. \n", + "Software Engineer and Data Analyst in Larsen and Toubro Technological Services worked in Oil & Gas Domain \n", + " \n", + "Jan 2020 – Oct 2021 \n", + " (Role – Data Engineer, Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Vadodara \n", + " (Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11G and Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)). \n", + "Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)] \n", + "● Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plant portal, finding different \n", + "equipment properties in plant portal, Different levels of data missing. Different file formats, Segregation and separation of different language \n", + "formats, metadata, and migrated documents in smart plant portal). \n", + "● Used Task, Thread and Parallel process and optimized codes with Singleton and Factory Design pattern. Excel dynamic read and write with \n", + "formatting using closedXML, OpenXML, EPPlus, Excel Data Reader. \n", + "● Key Achievement – Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time. \n", + "SPI (Smart Plant Integration) and SPEC [ Covestro, IPEP (Data analytics team)] \n", + "● Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. \n", + "Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized \n", + "arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view \n", + "sync. Comparison checks for BLOB data and other Hash File data. \n", + "● Implemented Task, Thread and Parallel process and optimized codes with Singleton and Factory Design pattern. Excel dynamic read and write \n", + "with formatting using closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames. \n", + "● Key Achievement – With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely \n", + "with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their \n", + "individual data conversion and wrangling problems. \n", + "Software Engineer in Quantum Mutual Fund worked in Financial Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Aug 2018 - Jan 2020 \n", + "(Role – Full Stack Developer/ Data Engineer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumba \n", + "Invest Online (INON) - Backend Developer \n", + "● Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP. \n", + "● Optimized backend SQL code for Investors, used to do KYC according to their citizenship with different criteria & process form in different queues. \n", + "Software Engineer in Smart Solutions worked in CRM, FMCG Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Oct 2013 - July 2018 \n", + "(Role – Full Stack Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumbai \n", + "Inventory management and services - Backend Developer \n", + "● Capturing, managing, and maintaining inventories and managing. Assigning blocks and holding inventories. \n", + "Graduate Engineer Trainee in Godrej & Boyce worked in CRM Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Oct 2012 - Sept 2013 \n", + "(Role – Full Stack Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumbai \n", + "Timespan- Attendance and Leave management system, Assets management system & Drawer depository safe - Application \n", + "● Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to \n", + "standard format. \n", + "CERTIFICATION AND LINKS (Recent) \n", + "● LinkedIn & Pluralsight Certificates - #Using Python with Excel #Data Wrangling with Pandas for Data Engineers\u001b[0m\u001b[32;1m\u001b[1;3mKrishna Dipayan Bhunia is a Senior Software Engineer and Data Engineer with 12+ years of experience across various industries. He specializes in Python as a Data Engineer/Scientist and has expertise in data engineering, analysis, and visualization. Krishna has worked with companies like Capgemini, Larsen and Toubro Technological Services, Quantum Mutual Fund, and Godrej & Boyce. He is proficient in various programming languages, data engineering & analysis tools, databases, and technical skills such as Python, NumPy, Pandas, Java, JavaScript, MS SQL, PL-SQL, Oracle, C#, Docker, and Github. Krishna has a M.Tech in Computer Engineering with Specialization in Software Eng. from Veermata Jijabai Technological Institute (VJTI), Mumbai and a B.E in Computer Engineering from the University of Mumbai. He can be reached at kri.career@gmail.com.\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -201,10 +782,10 @@ "data": { "text/plain": [ "{'input': 'Retrieve relevant documents for: Pls answer in one word, where Krishna works?',\n", - " 'output': 'Tool use failed: no tool can be called with name extract_answer'}" + " 'output': 'Krishna Dipayan Bhunia is a Senior Software Engineer and Data Engineer with 12+ years of experience across various industries. He specializes in Python as a Data Engineer/Scientist and has expertise in data engineering, analysis, and visualization. Krishna has worked with companies like Capgemini, Larsen and Toubro Technological Services, Quantum Mutual Fund, and Godrej & Boyce. He is proficient in various programming languages, data engineering & analysis tools, databases, and technical skills such as Python, NumPy, Pandas, Java, JavaScript, MS SQL, PL-SQL, Oracle, C#, Docker, and Github. Krishna has a M.Tech in Computer Engineering with Specialization in Software Eng. from Veermata Jijabai Technological Institute (VJTI), Mumbai and a B.E in Computer Engineering from the University of Mumbai. He can be reached at kri.career@gmail.com.'}" ] }, - "execution_count": 66, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -220,7 +801,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -231,14 +812,186 @@ "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\u001b[32;1m\u001b[1;3m\n", - "Invoking: `retrieve_documents` with `{'query': 'Krishna was working on 2012'}`\n", + "Invoking: `retrieve_documents` with `{'query': 'Krishna 2012 work location'}`\n", + "\n", "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA \n", + "Senior Software Engineer | Senior Data Engineer | Python Developer \n", + "+91 865 200 7894 \n", + " \n", + "Github Link \n", + "LinkedIn \n", + " \n", + "kri.career@gmail.com \n", + "SUMMARY \n", + "● Seasoned Software Engineer/Full Stack Developer with 12+ years of experience across industries like CRM, Oil & Gas, Financial, and FMCG. Over \n", + "6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. \n", + "● Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used \n", + "Python libraries such as NumPy, and Pandas for advanced data analysis and engineering stuff. \n", + "● Experienced in designing software solutions using Python, C#, and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization \n", + "(Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively. \n", + "EDUCATION \n", + "● M.TECH (Computer Eng. with Specialization in Software Eng.) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Aug 2016 – Jun 2018 \n", + "Veermata Jijabai Technological Institute (VJTI), Mumbai \n", + "● B.E Computer Engineering (University of Mumbai) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Aug 2008 – Jun 2012 \n", + "TECHNICAL SKILLS \n", + "● Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github. \n", + "● Data Engineering & Analysis: Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, \n", + "Data Visualization, Statistics, AWS (Amazon Web Services), Azure. \n", + "● Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c. \n", + "● Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture. \n", + "WORK EXPERIENCE & PROJECTS \n", + "Senior Data Engineer in Capgemini \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Oct 2021 – Present \n", + "Client - P&G(Procter & Gamble) - (Role - Data Engineer, Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Pune(Remote) \n", + "● Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub. \n", + "● Proficient in Python for data engineering pipelines. \n", + "● Experienced with Pandas, NumPy for data processing and analysis. \n", + "● Skilled in client communication to gather data and project requirements. \n", + "● Set up and configured Azure pipelines for CI/CD of data pipelines. \n", + "● Created and optimized MS-SQL tables for efficient data storage. \n", + "● Populated metrics to Grafana Dashboard from manufacturing data. \n", + "● Designed ETL pipelines for data extraction from various sources. \n", + "● Applied statistical techniques and optimization for data contextualization. \n", + "● Delivered pipelines for leakage, defect detection, and insights. \n", + "Key Achievement - With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves \n", + "the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half \n", + "of the previous defects identified. \n", + "Software Engineer and Data Analyst in Larsen and Toubro Technological Services worked in Oil & Gas Domain \n", + " \n", + "Jan 2020 – Oct 2021 \n", + " (Role – Data Engineer, Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Vadodara \n", + " (Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11G and Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)). \n", + "Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)] \n", + "● Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plant portal, finding different \n", + "equipment properties in plant portal, Different levels of data missing. Different file formats, Segregation and separation of different language \n", + "formats, metadata, and migrated documents in smart plant portal). \n", + "● Used Task, Thread and Parallel process and optimized codes with Singleton and Factory Design pattern. Excel dynamic read and write with \n", + "formatting using closedXML, OpenXML, EPPlus, Excel Data Reader. \n", + "● Key Achievement – Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time. \n", + "SPI (Smart Plant Integration) and SPEC [ Covestro, IPEP (Data analytics team)] \n", + "● Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. \n", + "Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized \n", + "arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view \n", + "sync. Comparison checks for BLOB data and other Hash File data. \n", + "● Implemented Task, Thread and Parallel process and optimized codes with Singleton and Factory Design pattern. Excel dynamic read and write \n", + "with formatting using closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames. \n", + "● Key Achievement – With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely \n", + "with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their \n", + "individual data conversion and wrangling problems. \n", + "Software Engineer in Quantum Mutual Fund worked in Financial Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Aug 2018 - Jan 2020 \n", + "(Role – Full Stack Developer/ Data Engineer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumba \n", + "Invest Online (INON) - Backend Developer \n", + "● Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP. \n", + "● Optimized backend SQL code for Investors, used to do KYC according to their citizenship with different criteria & process form in different queues. \n", + "Software Engineer in Smart Solutions worked in CRM, FMCG Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Oct 2013 - July 2018 \n", + "(Role – Full Stack Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumbai \n", + "Inventory management and services - Backend Developer \n", + "● Capturing, managing, and maintaining inventories and managing. Assigning blocks and holding inventories. \n", + "Graduate Engineer Trainee in Godrej & Boyce worked in CRM Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Oct 2012 - Sept 2013 \n", + "(Role – Full Stack Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumbai \n", + "Timespan- Attendance and Leave management system, Assets management system & Drawer depository safe - Application \n", + "● Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to \n", + "standard format. \n", + "CERTIFICATION AND LINKS (Recent) \n", + "● LinkedIn & Pluralsight Certificates - #Using Python with Excel #Data Wrangling with Pandas for Data Engineers\u001b[0m\u001b[32;1m\u001b[1;3mBased on the information provided by the tool, Krishna Dipayan Bhunia was a Senior Software Engineer and Data Engineer with over 12 years of experience in various industries like CRM, Oil & Gas, Financial, and FMCG. He specializes in data engineering, analysis, and visualization using Python libraries such as NumPy and Pandas.\n", "\n", - "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3m\n", - "Invoking: `retrieve_documents` with `{'query': 'Krishna DIPAYAN BHUNIA working experience in 2012'}`\n", + "In 2012, Krishna was working as a Graduate Engineer Trainee in Godrej & Boyce, which is a company in the CRM domain.\n", "\n", + "Here is the final answer:\n", "\n", - "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mBased on the provided information, it appears that Krishna Dipayan Bhunia was working as a Graduate Engineer Trainee in Godrej & Boyce in the CRM domain from October 2012 to September 2013.\u001b[0m\n", + "In 2012, Krishna Dipayan Bhunia was working as a Graduate Engineer Trainee in Godrej & Boyce, which is a company in the CRM domain.\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -247,10 +1000,10 @@ "data": { "text/plain": [ "{'input': 'Retrieve relevant documents for: where Krishna was working on 2012',\n", - " 'output': 'Based on the provided information, it appears that Krishna Dipayan Bhunia was working as a Graduate Engineer Trainee in Godrej & Boyce in the CRM domain from October 2012 to September 2013.'}" + " 'output': 'Based on the information provided by the tool, Krishna Dipayan Bhunia was a Senior Software Engineer and Data Engineer with over 12 years of experience in various industries like CRM, Oil & Gas, Financial, and FMCG. He specializes in data engineering, analysis, and visualization using Python libraries such as NumPy and Pandas.\\n\\nIn 2012, Krishna was working as a Graduate Engineer Trainee in Godrej & Boyce, which is a company in the CRM domain.\\n\\nHere is the final answer:\\n\\nIn 2012, Krishna Dipayan Bhunia was working as a Graduate Engineer Trainee in Godrej & Boyce, which is a company in the CRM domain.'}" ] }, - "execution_count": 67, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } diff --git a/requirements.txt b/requirements.txt index dc732283..0408073b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,6 @@ +langchain +langchain_core langchain_groq -langchain_huggingface \ No newline at end of file +langchain_community +langchain_huggingface +pymupdf \ No newline at end of file From b92d9ac25488999a1f09109775610a92c0b70bc4 Mon Sep 17 00:00:00 2001 From: Krishna Bhunia Date: Tue, 15 Oct 2024 13:11:09 +0530 Subject: [PATCH 6/9] new execution --- code/nb_files/rag2.ipynb | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/code/nb_files/rag2.ipynb b/code/nb_files/rag2.ipynb index 70fad8cf..c1927e74 100644 --- a/code/nb_files/rag2.ipynb +++ b/code/nb_files/rag2.ipynb @@ -148,14 +148,12 @@ "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\u001b[32;1m\u001b[1;3m\n", - "Invoking: `retrieve_documents` with `{'query': 'who is Krishna?'}`\n", + "Invoking: `retrieve_documents` with `{'query': 'who is Krishna'}`\n", "\n", "\n", - "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3m\n", - "Invoking: `retrieve_documents` with `{'query': 'Krishna'}`\n", - "\n", - "\n", - "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mThe text you provided appears to be a resume or a professional profile of someone named Krishna Dipayan Bhunia, who is a software engineer and data engineer with expertise in Python, data analysis, and visualization. However, this does not seem to be related to the Hindu deity Krishna. If you are looking for information on the Hindu deity Krishna, I'd be happy to provide that. Krishna is a major deity in Hinduism and is considered the eighth avatar, or incarnation, of the god Vishnu. He is known for his wisdom, courage, and divine power.\u001b[0m\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKrishna Dipayan Bhunia is a Senior Software Engineer.\n", + "He works in Capgemini as a Senior Data Engineer.\n", + "In 2012 he was working for Godrej and Boyce as Full stack Developer.\u001b[0m\u001b[32;1m\u001b[1;3mKrishna Dipayan Bhunia is a Senior Software Engineer who works in Capgemini as a Senior Data Engineer. In 2012, he was working for Godrej and Boyce as a Full stack Developer.\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -164,7 +162,7 @@ "data": { "text/plain": [ "{'input': 'Retrieve relevant documents for: who is Krishna?',\n", - " 'output': \"The text you provided appears to be a resume or a professional profile of someone named Krishna Dipayan Bhunia, who is a software engineer and data engineer with expertise in Python, data analysis, and visualization. However, this does not seem to be related to the Hindu deity Krishna. If you are looking for information on the Hindu deity Krishna, I'd be happy to provide that. Krishna is a major deity in Hinduism and is considered the eighth avatar, or incarnation, of the god Vishnu. He is known for his wisdom, courage, and divine power.\"}" + " 'output': 'Krishna Dipayan Bhunia is a Senior Software Engineer who works in Capgemini as a Senior Data Engineer. In 2012, he was working for Godrej and Boyce as a Full stack Developer.'}" ] }, "execution_count": 6, @@ -194,10 +192,12 @@ "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\u001b[32;1m\u001b[1;3m\n", - "Invoking: `retrieve_documents` with `{'query': 'Krishna works'}`\n", + "Invoking: `retrieve_documents` with `{'query': 'where Krishna works'}`\n", "\n", "\n", - "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mTool use failed: no tool can be called with name answer_query\u001b[0m\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKrishna Dipayan Bhunia is a Senior Software Engineer.\n", + "He works in Capgemini as a Senior Data Engineer.\n", + "In 2012 he was working for Godrej and Boyce as Full stack Developer.\u001b[0m\u001b[32;1m\u001b[1;3mKrishna Dipayan Bhunia works at Capgemini as a Senior Data Engineer.\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -206,7 +206,7 @@ "data": { "text/plain": [ "{'input': 'Retrieve relevant documents for: Pls answer in one word, where Krishna works?',\n", - " 'output': 'Tool use failed: no tool can be called with name answer_query'}" + " 'output': 'Krishna Dipayan Bhunia works at Capgemini as a Senior Data Engineer.'}" ] }, "execution_count": 7, @@ -236,10 +236,12 @@ "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\u001b[32;1m\u001b[1;3m\n", - "Invoking: `retrieve_documents` with `{'query': 'where Krishna was working on 2012'}`\n", + "Invoking: `retrieve_documents` with `{'query': 'Krishna 2012 work location'}`\n", "\n", "\n", - "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA Senior Software Engineer | Senior Data Engineer | Python Developer+91 865 200 7894Github LinkLinkedInkri.career@gmail.comSUMMARY●Seasoned Software Engineer/Full Stack Developer with 12+ years of experienceacross industries like CRM, Oil & Gas, Financial, and FMCG. Over 6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. ●Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used Python libraries such as NumPy, and Pandasfor advanced data analysis and engineering stuff.●Experienced in designing software solutions using Python, C#,and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization (Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively.EDUCATION●M.TECH (Computer Eng. with Specializationin Software Eng.)Aug 2016 –Jun 2018Veermata Jijabai Technological Institute (VJTI), Mumbai●B.E Computer Engineering (University of Mumbai)Aug 2008 –Jun 2012TECHNICAL SKILLS●Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github.●Data Engineering & Analysis:Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, Data Visualization, Statistics,AWS (Amazon Web Services), Azure.●Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c.●Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture.WORK EXPERIENCE & PROJECTSSenior Data Engineer in CapgeminiOct 2021 –PresentClient -P&G(Procter & Gamble) -(Role -Data Engineer, Developer)Pune(Remote)●Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub.●Proficient in Python for data engineering pipelines.●Experienced with Pandas, NumPy for data processing and analysis.●Skilled in client communication to gather data and project requirements.●Set up and configured Azure pipelines for CI/CD of data pipelines.●Created and optimized MS-SQL tables for efficient data storage.●Populated metrics to Grafana Dashboard from manufacturing data.●Designed ETL pipelines for data extraction from various sources.●Applied statistical techniques and optimization for data contextualization.●Delivered pipelines for leakage, defect detection, and insights.Key Achievement -With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half of the previous defects identified.Software Engineer and Data Analystin Larsen and Toubro Technological Servicesworked in Oil & GasDomainJan 2020 –Oct 2021(Role –Data Engineer, Developer)Vadodara(Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11Gand Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)).Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)]●Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plantportal, finding different equipment properties in plant portal, Different levels of data missing. Different file formats, Segregationand separation of different language formats, metadata, and migrated documents in smart plant portal). ●Used Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, OpenXML, EPPlus, Excel Data Reader.●Key Achievement –Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time.SPI (Smart PlantIntegration) and SPEC [ Covestro, IPEP (Data analytics team)]●Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view sync. Comparison checks for BLOB data and other Hash File data.●Implemented Task, Thread and Parallel process and optimizedcodes with Singleton and Factory Design pattern.Excel dynamic read and write with formattingusing closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames.●Key Achievement –With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their individual data conversion and wrangling problems.Software Engineerin Quantum Mutual Fundworked in FinancialDomainAug 2018 -Jan 2020(Role –Full Stack Developer/ Data Engineer)MumbaInvest Online (INON) -Backend Developer●Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP.●Optimized backend SQL code for Investors, usedto do KYC according to their citizenship with different criteria & process form in different queues.Software Engineer in Smart Solutionsworked in CRM, FMCG DomainOct 2013 -July 2018(Role –Full Stack Developer)MumbaiInventory management and services -Backend Developer ●Capturing, managing, and maintaining inventories and managing. Assigningblocks and holdinginventories.Graduate Engineer Trainee in Godrej & Boyce worked in CRM DomainOct 2012 -Sept 2013(Role –Full Stack Developer)MumbaiTimespan-Attendance and Leave management system, Assets management system & Drawer depository safe -Application ●Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to standard format.CERTIFICATION AND LINKS(Recent)●LinkedIn & Pluralsight Certificates -#Using Python with Excel#Data Wrangling with Pandas for DataEngineers\u001b[0m\u001b[32;1m\u001b[1;3mBased on the retrieved document, it appears that Krishna was working as a Senior Data Engineer in Capgemini from October 2021 to present, and prior to that, he worked in various roles in different companies including Larsen and Toubro Technological Services, Quantum Mutual Fund, Smart Solutions, and Godrej & Boyce, starting from October 2012.\u001b[0m\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKrishna Dipayan Bhunia is a Senior Software Engineer.\n", + "He works in Capgemini as a Senior Data Engineer.\n", + "In 2012 he was working for Godrej and Boyce as Full stack Developer.\u001b[0m\u001b[32;1m\u001b[1;3mKrishna Dipayan Bhunia was working for Godrej and Boyce as a Full stack Developer in 2012.\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -248,7 +250,7 @@ "data": { "text/plain": [ "{'input': 'Retrieve relevant documents for: where Krishna was working on 2012',\n", - " 'output': 'Based on the retrieved document, it appears that Krishna was working as a Senior Data Engineer in Capgemini from October 2021 to present, and prior to that, he worked in various roles in different companies including Larsen and Toubro Technological Services, Quantum Mutual Fund, Smart Solutions, and Godrej & Boyce, starting from October 2012.'}" + " 'output': 'Krishna Dipayan Bhunia was working for Godrej and Boyce as a Full stack Developer in 2012.'}" ] }, "execution_count": 8, From f3d2504c0263f319609beba80622ef8eaa0284ce Mon Sep 17 00:00:00 2001 From: Krishna Bhunia Date: Wed, 16 Oct 2024 11:37:33 +0530 Subject: [PATCH 7/9] change in model --- code/nb_files/rag2_pdf.ipynb | 487 ++++++++++++++++++++++++++++------- 1 file changed, 388 insertions(+), 99 deletions(-) diff --git a/code/nb_files/rag2_pdf.ipynb b/code/nb_files/rag2_pdf.ipynb index 5f0c332d..5c814f39 100644 --- a/code/nb_files/rag2_pdf.ipynb +++ b/code/nb_files/rag2_pdf.ipynb @@ -2,67 +2,15 @@ "cells": [ { "cell_type": "code", - "execution_count": 34, + "execution_count": 1, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n", - "To disable this warning, you can either:\n", - "\t- Avoid using `tokenizers` before the fork if possible\n", - "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: langchain_groq in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (0.2.0)\n", - "Requirement already satisfied: groq<1,>=0.4.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain_groq) (0.11.0)\n", - "Requirement already satisfied: langchain-core<0.4,>=0.3 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain_groq) (0.3.9)\n", - "Requirement already satisfied: anyio<5,>=3.5.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (4.6.0)\n", - "Requirement already satisfied: distro<2,>=1.7.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (1.9.0)\n", - "Requirement already satisfied: httpx<1,>=0.23.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (0.27.2)\n", - "Requirement already satisfied: pydantic<3,>=1.9.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (2.9.2)\n", - "Requirement already satisfied: sniffio in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (1.3.1)\n", - "Requirement already satisfied: typing-extensions<5,>=4.7 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from groq<1,>=0.4.1->langchain_groq) (4.12.2)\n", - "Requirement already satisfied: PyYAML>=5.3 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (6.0.2)\n", - "Requirement already satisfied: jsonpatch<2.0,>=1.33 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (1.33)\n", - "Requirement already satisfied: langsmith<0.2.0,>=0.1.125 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (0.1.132)\n", - "Requirement already satisfied: packaging<25,>=23.2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (24.1)\n", - "Requirement already satisfied: tenacity!=8.4.0,<9.0.0,>=8.1.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langchain-core<0.4,>=0.3->langchain_groq) (8.5.0)\n", - "Requirement already satisfied: idna>=2.8 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from anyio<5,>=3.5.0->groq<1,>=0.4.1->langchain_groq) (3.10)\n", - "Requirement already satisfied: exceptiongroup>=1.0.2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from anyio<5,>=3.5.0->groq<1,>=0.4.1->langchain_groq) (1.2.2)\n", - "Requirement already satisfied: certifi in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain_groq) (2024.8.30)\n", - "Requirement already satisfied: httpcore==1.* in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain_groq) (1.0.6)\n", - "Requirement already satisfied: h11<0.15,>=0.13 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->groq<1,>=0.4.1->langchain_groq) (0.14.0)\n", - "Requirement already satisfied: jsonpointer>=1.9 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from jsonpatch<2.0,>=1.33->langchain-core<0.4,>=0.3->langchain_groq) (3.0.0)\n", - "Requirement already satisfied: orjson<4.0.0,>=3.9.14 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (3.10.7)\n", - "Requirement already satisfied: requests<3,>=2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (2.32.3)\n", - "Requirement already satisfied: requests-toolbelt<2.0.0,>=1.0.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (1.0.0)\n", - "Requirement already satisfied: annotated-types>=0.6.0 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from pydantic<3,>=1.9.0->groq<1,>=0.4.1->langchain_groq) (0.7.0)\n", - "Requirement already satisfied: pydantic-core==2.23.4 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from pydantic<3,>=1.9.0->groq<1,>=0.4.1->langchain_groq) (2.23.4)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests<3,>=2->langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (3.3.2)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (from requests<3,>=2->langsmith<0.2.0,>=0.1.125->langchain-core<0.4,>=0.3->langchain_groq) (2.2.3)\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n", - "To disable this warning, you can either:\n", - "\t- Avoid using `tokenizers` before the fork if possible\n", - "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: pymupdf in /home/kb/MES_Copilot/POC/venv_kri_mes/lib/python3.10/site-packages (1.24.11)\n" + "/bin/bash: /home/kb/MES/MES_POC/POC/venv_kri_mes/bin/pip: /home/kb/MES_Copilot/POC/venv_kri_mes/bin/python: bad interpreter: No such file or directory\n", + "/bin/bash: /home/kb/MES/MES_POC/POC/venv_kri_mes/bin/pip: /home/kb/MES_Copilot/POC/venv_kri_mes/bin/python: bad interpreter: No such file or directory\n" ] } ], @@ -73,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -95,9 +43,18 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/kb/MES/MES_POC/POC/venv_kri_mes/lib/python3.10/site-packages/sentence_transformers/cross_encoder/CrossEncoder.py:13: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from tqdm.autonotebook import tqdm, trange\n" + ] + } + ], "source": [ "# Load documents\n", "pdf_loader = PyMuPDFLoader(\"krishna_resume.pdf\")\n", @@ -124,25 +81,25 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ - "llm = ChatGroq(\n", - " model=\"mixtral-8x7b-32768\",\n", - " temperature=0,\n", - " max_tokens=None,\n", - " timeout=None,\n", - " max_retries=2\n", - ")\n", + "# llm = ChatGroq(\n", + "# model=\"mixtral-8x7b-32768\",\n", + "# temperature=0,\n", + "# max_tokens=None,\n", + "# timeout=None,\n", + "# max_retries=2\n", + "# )\n", "\n", "\n", - "# llm = ChatGroq(model=\"llama3-70b-8192\", temperature=1)" + "llm = ChatGroq(model=\"llama3-70b-8192\", temperature=0)" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -155,7 +112,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -166,7 +123,7 @@ "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\u001b[32;1m\u001b[1;3m\n", - "Invoking: `retrieve_documents` with `{'query': 'who is Krishna'}`\n", + "Invoking: `retrieve_documents` with `{'query': 'who is Krishna?'}`\n", "\n", "\n", "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA \n", @@ -339,13 +296,181 @@ "● Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to \n", "standard format. \n", "CERTIFICATION AND LINKS (Recent) \n", - "● LinkedIn & Pluralsight Certificates - #Using Python with Excel #Data Wrangling with Pandas for Data Engineers\u001b[0m\u001b[32;1m\u001b[1;3mKrishna Dipayan Bhunia is a Senior Software Engineer and Data Engineer with 12+ years of experience across various industries such as CRM, Oil & Gas, Financial, and FMCG. He specializes in data engineering, analysis, and visualization with over 6 years of expertise in Python. Krishna has a strong background in writing clean, production-level Python code and is proficient in various programming languages, frameworks, and databases.\n", + "● LinkedIn & Pluralsight Certificates - #Using Python with Excel #Data Wrangling with Pandas for Data Engineers\u001b[0m\u001b[32;1m\u001b[1;3m\n", + "Invoking: `retrieve_documents` with `{'query': 'Krishna'}`\n", "\n", - "He has worked on multiple projects, including his current role as a Senior Data Engineer at Capgemini for P&G, where he has been responsible for data engineering pipelines, data processing and analysis, client communication, and ETL pipelines for data extraction from various sources. Krishna has also worked as a Software Engineer and Data Analyst in the Oil & Gas domain at Larsen and Toubro Technological Services, where he implemented data analysis processes and optimized codes using various tools and libraries.\n", "\n", - "Krishna has a Master of Technology degree in Computer Engineering with a specialization in Software Engineering from Veermata Jijabai Technological Institute (VJTI), Mumbai, and a Bachelor of Engineering degree in Computer Engineering from the University of Mumbai. He has also earned certifications from LinkedIn and Pluralsight for using Python with Excel and data wrangling with Pandas for Data Engineers.\n", - "\n", - "In summary, Krishna Dipayan Bhunia is a highly skilled and experienced Senior Software Engineer and Data Engineer with a strong background in Python and data engineering. He has a proven track record of delivering high-quality solutions and working closely with cross-functional teams to design, build, and deliver end-to-end solutions.\u001b[0m\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA \n", + "Senior Software Engineer | Senior Data Engineer | Python Developer \n", + "+91 865 200 7894 \n", + " \n", + "Github Link \n", + "LinkedIn \n", + " \n", + "kri.career@gmail.com \n", + "SUMMARY \n", + "● Seasoned Software Engineer/Full Stack Developer with 12+ years of experience across industries like CRM, Oil & Gas, Financial, and FMCG. Over \n", + "6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. \n", + "● Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used \n", + "Python libraries such as NumPy, and Pandas for advanced data analysis and engineering stuff. \n", + "● Experienced in designing software solutions using Python, C#, and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization \n", + "(Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively. \n", + "EDUCATION \n", + "● M.TECH (Computer Eng. with Specialization in Software Eng.) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Aug 2016 – Jun 2018 \n", + "Veermata Jijabai Technological Institute (VJTI), Mumbai \n", + "● B.E Computer Engineering (University of Mumbai) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Aug 2008 – Jun 2012 \n", + "TECHNICAL SKILLS \n", + "● Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github. \n", + "● Data Engineering & Analysis: Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, \n", + "Data Visualization, Statistics, AWS (Amazon Web Services), Azure. \n", + "● Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c. \n", + "● Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture. \n", + "WORK EXPERIENCE & PROJECTS \n", + "Senior Data Engineer in Capgemini \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Oct 2021 – Present \n", + "Client - P&G(Procter & Gamble) - (Role - Data Engineer, Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Pune(Remote) \n", + "● Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub. \n", + "● Proficient in Python for data engineering pipelines. \n", + "● Experienced with Pandas, NumPy for data processing and analysis. \n", + "● Skilled in client communication to gather data and project requirements. \n", + "● Set up and configured Azure pipelines for CI/CD of data pipelines. \n", + "● Created and optimized MS-SQL tables for efficient data storage. \n", + "● Populated metrics to Grafana Dashboard from manufacturing data. \n", + "● Designed ETL pipelines for data extraction from various sources. \n", + "● Applied statistical techniques and optimization for data contextualization. \n", + "● Delivered pipelines for leakage, defect detection, and insights. \n", + "Key Achievement - With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves \n", + "the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half \n", + "of the previous defects identified. \n", + "Software Engineer and Data Analyst in Larsen and Toubro Technological Services worked in Oil & Gas Domain \n", + " \n", + "Jan 2020 – Oct 2021 \n", + " (Role – Data Engineer, Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Vadodara \n", + " (Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11G and Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)). \n", + "Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)] \n", + "● Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plant portal, finding different \n", + "equipment properties in plant portal, Different levels of data missing. Different file formats, Segregation and separation of different language \n", + "formats, metadata, and migrated documents in smart plant portal). \n", + "● Used Task, Thread and Parallel process and optimized codes with Singleton and Factory Design pattern. Excel dynamic read and write with \n", + "formatting using closedXML, OpenXML, EPPlus, Excel Data Reader. \n", + "● Key Achievement – Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time. \n", + "SPI (Smart Plant Integration) and SPEC [ Covestro, IPEP (Data analytics team)] \n", + "● Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. \n", + "Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized \n", + "arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view \n", + "sync. Comparison checks for BLOB data and other Hash File data. \n", + "● Implemented Task, Thread and Parallel process and optimized codes with Singleton and Factory Design pattern. Excel dynamic read and write \n", + "with formatting using closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames. \n", + "● Key Achievement – With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely \n", + "with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their \n", + "individual data conversion and wrangling problems. \n", + "Software Engineer in Quantum Mutual Fund worked in Financial Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Aug 2018 - Jan 2020 \n", + "(Role – Full Stack Developer/ Data Engineer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumba \n", + "Invest Online (INON) - Backend Developer \n", + "● Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP. \n", + "● Optimized backend SQL code for Investors, used to do KYC according to their citizenship with different criteria & process form in different queues. \n", + "Software Engineer in Smart Solutions worked in CRM, FMCG Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Oct 2013 - July 2018 \n", + "(Role – Full Stack Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumbai \n", + "Inventory management and services - Backend Developer \n", + "● Capturing, managing, and maintaining inventories and managing. Assigning blocks and holding inventories. \n", + "Graduate Engineer Trainee in Godrej & Boyce worked in CRM Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Oct 2012 - Sept 2013 \n", + "(Role – Full Stack Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumbai \n", + "Timespan- Attendance and Leave management system, Assets management system & Drawer depository safe - Application \n", + "● Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to \n", + "standard format. \n", + "CERTIFICATION AND LINKS (Recent) \n", + "● LinkedIn & Pluralsight Certificates - #Using Python with Excel #Data Wrangling with Pandas for Data Engineers\u001b[0m\u001b[32;1m\u001b[1;3mKrishna Dipayan Bhunia is a seasoned software engineer and data engineer with over 12 years of experience across various industries. He has expertise in Python, data engineering, analysis, and visualization. He has worked on several projects, including data pipelines, ETL, and data visualization, and has experience with cloud platforms, containerization, and database management.\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -354,10 +479,10 @@ "data": { "text/plain": [ "{'input': 'Retrieve relevant documents for: who is Krishna?',\n", - " 'output': 'Krishna Dipayan Bhunia is a Senior Software Engineer and Data Engineer with 12+ years of experience across various industries such as CRM, Oil & Gas, Financial, and FMCG. He specializes in data engineering, analysis, and visualization with over 6 years of expertise in Python. Krishna has a strong background in writing clean, production-level Python code and is proficient in various programming languages, frameworks, and databases.\\n\\nHe has worked on multiple projects, including his current role as a Senior Data Engineer at Capgemini for P&G, where he has been responsible for data engineering pipelines, data processing and analysis, client communication, and ETL pipelines for data extraction from various sources. Krishna has also worked as a Software Engineer and Data Analyst in the Oil & Gas domain at Larsen and Toubro Technological Services, where he implemented data analysis processes and optimized codes using various tools and libraries.\\n\\nKrishna has a Master of Technology degree in Computer Engineering with a specialization in Software Engineering from Veermata Jijabai Technological Institute (VJTI), Mumbai, and a Bachelor of Engineering degree in Computer Engineering from the University of Mumbai. He has also earned certifications from LinkedIn and Pluralsight for using Python with Excel and data wrangling with Pandas for Data Engineers.\\n\\nIn summary, Krishna Dipayan Bhunia is a highly skilled and experienced Senior Software Engineer and Data Engineer with a strong background in Python and data engineering. He has a proven track record of delivering high-quality solutions and working closely with cross-functional teams to design, build, and deliver end-to-end solutions.'}" + " 'output': 'Krishna Dipayan Bhunia is a seasoned software engineer and data engineer with over 12 years of experience across various industries. He has expertise in Python, data engineering, analysis, and visualization. He has worked on several projects, including data pipelines, ETL, and data visualization, and has experience with cloud platforms, containerization, and database management.'}" ] }, - "execution_count": 39, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -373,7 +498,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -384,7 +509,7 @@ "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\u001b[32;1m\u001b[1;3m\n", - "Invoking: `retrieve_documents` with `{'query': \"Krishna's company\"}`\n", + "Invoking: `retrieve_documents` with `{'query': 'In which company Krishna works?'}`\n", "\n", "\n", "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA \n", @@ -557,11 +682,7 @@ "● Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to \n", "standard format. \n", "CERTIFICATION AND LINKS (Recent) \n", - "● LinkedIn & Pluralsight Certificates - #Using Python with Excel #Data Wrangling with Pandas for Data Engineers\u001b[0m\u001b[32;1m\u001b[1;3mBased on the information provided by the tool, Krishna Dipayan Bhunia works as a Senior Data Engineer at Capgemini, serving the client Procter & Gamble (P&G). Krishna's work involves data engineering pipelines using Python, Pandas, NumPy, MS-SQL 2022, Azure, and Docker. One of Krishna's key achievements at Capgemini includes reducing defects and leakages in product manufacturing by half by efficiently contextualizing data from multiple sources.\n", - "\n", - "Previously, Krishna worked as a Software Engineer and Data Analyst at Larsen and Toubro Technological Services in the Oil & Gas domain, where Krishna implemented data analysis processes and optimized code using various tools and libraries. Krishna also has experience as a Full Stack Developer and Data Engineer at Quantum Mutual Fund in the Financial domain and Smart Solutions in the CRM and FMCG domains.\n", - "\n", - "Krishna has a strong background in technical skills, including programming languages, data engineering & analysis, databases, and expertise in DSA, algorithm analysis, and distributed systems. Krishna holds a Master of Technology in Computer Engineering with a specialization in Software Engineering from Veermata Jijabai Technological Institute (VJTI), Mumbai, and a Bachelor of Engineering in Computer Engineering from the University of Mumbai. Krishna also has recent certifications from LinkedIn and Pluralsight related to Python and data wrangling.\u001b[0m\n", + "● LinkedIn & Pluralsight Certificates - #Using Python with Excel #Data Wrangling with Pandas for Data Engineers\u001b[0m\u001b[32;1m\u001b[1;3mTool use failed: no valid JSON object found in message content\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -570,10 +691,10 @@ "data": { "text/plain": [ "{'input': 'Retrieve relevant documents for: In which company Krishna works?',\n", - " 'output': \"Based on the information provided by the tool, Krishna Dipayan Bhunia works as a Senior Data Engineer at Capgemini, serving the client Procter & Gamble (P&G). Krishna's work involves data engineering pipelines using Python, Pandas, NumPy, MS-SQL 2022, Azure, and Docker. One of Krishna's key achievements at Capgemini includes reducing defects and leakages in product manufacturing by half by efficiently contextualizing data from multiple sources.\\n\\nPreviously, Krishna worked as a Software Engineer and Data Analyst at Larsen and Toubro Technological Services in the Oil & Gas domain, where Krishna implemented data analysis processes and optimized code using various tools and libraries. Krishna also has experience as a Full Stack Developer and Data Engineer at Quantum Mutual Fund in the Financial domain and Smart Solutions in the CRM and FMCG domains.\\n\\nKrishna has a strong background in technical skills, including programming languages, data engineering & analysis, databases, and expertise in DSA, algorithm analysis, and distributed systems. Krishna holds a Master of Technology in Computer Engineering with a specialization in Software Engineering from Veermata Jijabai Technological Institute (VJTI), Mumbai, and a Bachelor of Engineering in Computer Engineering from the University of Mumbai. Krishna also has recent certifications from LinkedIn and Pluralsight related to Python and data wrangling.\"}" + " 'output': 'Tool use failed: no valid JSON object found in message content'}" ] }, - "execution_count": 40, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -589,7 +710,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -773,7 +894,7 @@ "● Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to \n", "standard format. \n", "CERTIFICATION AND LINKS (Recent) \n", - "● LinkedIn & Pluralsight Certificates - #Using Python with Excel #Data Wrangling with Pandas for Data Engineers\u001b[0m\u001b[32;1m\u001b[1;3mKrishna Dipayan Bhunia is a Senior Software Engineer and Data Engineer with 12+ years of experience across various industries. He specializes in Python as a Data Engineer/Scientist and has expertise in data engineering, analysis, and visualization. Krishna has worked with companies like Capgemini, Larsen and Toubro Technological Services, Quantum Mutual Fund, and Godrej & Boyce. He is proficient in various programming languages, data engineering & analysis tools, databases, and technical skills such as Python, NumPy, Pandas, Java, JavaScript, MS SQL, PL-SQL, Oracle, C#, Docker, and Github. Krishna has a M.Tech in Computer Engineering with Specialization in Software Eng. from Veermata Jijabai Technological Institute (VJTI), Mumbai and a B.E in Computer Engineering from the University of Mumbai. He can be reached at kri.career@gmail.com.\u001b[0m\n", + "● LinkedIn & Pluralsight Certificates - #Using Python with Excel #Data Wrangling with Pandas for Data Engineers\u001b[0m\u001b[32;1m\u001b[1;3mDwarka\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -782,10 +903,10 @@ "data": { "text/plain": [ "{'input': 'Retrieve relevant documents for: Pls answer in one word, where Krishna works?',\n", - " 'output': 'Krishna Dipayan Bhunia is a Senior Software Engineer and Data Engineer with 12+ years of experience across various industries. He specializes in Python as a Data Engineer/Scientist and has expertise in data engineering, analysis, and visualization. Krishna has worked with companies like Capgemini, Larsen and Toubro Technological Services, Quantum Mutual Fund, and Godrej & Boyce. He is proficient in various programming languages, data engineering & analysis tools, databases, and technical skills such as Python, NumPy, Pandas, Java, JavaScript, MS SQL, PL-SQL, Oracle, C#, Docker, and Github. Krishna has a M.Tech in Computer Engineering with Specialization in Software Eng. from Veermata Jijabai Technological Institute (VJTI), Mumbai and a B.E in Computer Engineering from the University of Mumbai. He can be reached at kri.career@gmail.com.'}" + " 'output': 'Dwarka'}" ] }, - "execution_count": 41, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -801,7 +922,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -812,7 +933,7 @@ "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\u001b[32;1m\u001b[1;3m\n", - "Invoking: `retrieve_documents` with `{'query': 'Krishna 2012 work location'}`\n", + "Invoking: `retrieve_documents` with `{'query': 'where Krishna was working on 2012'}`\n", "\n", "\n", "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA \n", @@ -985,13 +1106,181 @@ "● Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to \n", "standard format. \n", "CERTIFICATION AND LINKS (Recent) \n", - "● LinkedIn & Pluralsight Certificates - #Using Python with Excel #Data Wrangling with Pandas for Data Engineers\u001b[0m\u001b[32;1m\u001b[1;3mBased on the information provided by the tool, Krishna Dipayan Bhunia was a Senior Software Engineer and Data Engineer with over 12 years of experience in various industries like CRM, Oil & Gas, Financial, and FMCG. He specializes in data engineering, analysis, and visualization using Python libraries such as NumPy and Pandas.\n", - "\n", - "In 2012, Krishna was working as a Graduate Engineer Trainee in Godrej & Boyce, which is a company in the CRM domain.\n", + "● LinkedIn & Pluralsight Certificates - #Using Python with Excel #Data Wrangling with Pandas for Data Engineers\u001b[0m\u001b[32;1m\u001b[1;3m\n", + "Invoking: `retrieve_documents` with `{'query': 'where Krishna was working on 2012'}`\n", "\n", - "Here is the final answer:\n", "\n", - "In 2012, Krishna Dipayan Bhunia was working as a Graduate Engineer Trainee in Godrej & Boyce, which is a company in the CRM domain.\u001b[0m\n", + "\u001b[0m\u001b[36;1m\u001b[1;3mKRISHNA DIPAYAN BHUNIA \n", + "Senior Software Engineer | Senior Data Engineer | Python Developer \n", + "+91 865 200 7894 \n", + " \n", + "Github Link \n", + "LinkedIn \n", + " \n", + "kri.career@gmail.com \n", + "SUMMARY \n", + "● Seasoned Software Engineer/Full Stack Developer with 12+ years of experience across industries like CRM, Oil & Gas, Financial, and FMCG. Over \n", + "6 years of expertise in Python as a Data Engineer/Scientist, specializing in data engineering, analysis, and visualization. \n", + "● Proficient in writing clean, production-level Python code, with strong skills in Object-Oriented Programming, DSA, and relational databases. Used \n", + "Python libraries such as NumPy, and Pandas for advanced data analysis and engineering stuff. \n", + "● Experienced in designing software solutions using Python, C#, and back-end technologies. Adept in cloud platforms (AWS, Azure), containerization \n", + "(Docker), and database management (SQL, No-SQL), with a strong ability to analyze algorithms and collaborate effectively. \n", + "EDUCATION \n", + "● M.TECH (Computer Eng. with Specialization in Software Eng.) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Aug 2016 – Jun 2018 \n", + "Veermata Jijabai Technological Institute (VJTI), Mumbai \n", + "● B.E Computer Engineering (University of Mumbai) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Aug 2008 – Jun 2012 \n", + "TECHNICAL SKILLS \n", + "● Languages & Frameworks: Python, NumPy, Pandas, Java, JavaScript (jQuery), MS SQL, PL-SQL, Oracle, C# (C-Sharp), Docker, Github. \n", + "● Data Engineering & Analysis: Data Science and Data engineering processes, Data Analysis, Classification, Regression Analysis, Cluster Analysis, \n", + "Data Visualization, Statistics, AWS (Amazon Web Services), Azure. \n", + "● Databases: MS SQL Server (2019/2017), MySQL, MongoDB, Oracle 19c. \n", + "● Expertise: DSA (Data Structures & Algorithms), Algorithm Analysis (Space & Time Complexity), Distributed Systems & Architecture. \n", + "WORK EXPERIENCE & PROJECTS \n", + "Senior Data Engineer in Capgemini \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Oct 2021 – Present \n", + "Client - P&G(Procter & Gamble) - (Role - Data Engineer, Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Pune(Remote) \n", + "● Technical Stack: Python, Pandas, NumPy, MS-SQL 2022, JSON, VS Code, Azure, Azure Pipelines, Docker, GitHub. \n", + "● Proficient in Python for data engineering pipelines. \n", + "● Experienced with Pandas, NumPy for data processing and analysis. \n", + "● Skilled in client communication to gather data and project requirements. \n", + "● Set up and configured Azure pipelines for CI/CD of data pipelines. \n", + "● Created and optimized MS-SQL tables for efficient data storage. \n", + "● Populated metrics to Grafana Dashboard from manufacturing data. \n", + "● Designed ETL pipelines for data extraction from various sources. \n", + "● Applied statistical techniques and optimization for data contextualization. \n", + "● Delivered pipelines for leakage, defect detection, and insights. \n", + "Key Achievement - With accommodating data from multiple sources makes it easy to contextualize data for easy analysis purposes, which improves \n", + "the manufacturing lines are more adhered to not making defects/leakages in product manufacturing. The defects/leakages have been reduced to half \n", + "of the previous defects identified. \n", + "Software Engineer and Data Analyst in Larsen and Toubro Technological Services worked in Oil & Gas Domain \n", + " \n", + "Jan 2020 – Oct 2021 \n", + " (Role – Data Engineer, Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Vadodara \n", + " (Python, NumPy, Pandas, SciPy, MS SQL Server 2017, Oracle 11G and Oracle 10G, xlrd, xlwt, openpyxl (Anaconda Navigator Framework)). \n", + "Plant Portal Data Analysis [ Covestro, IPEP (Data analytics team)] \n", + "● Implementation for the process of Analysis (Deduplication, Data Seagration, File Reference Missing in Smart Plant portal, finding different \n", + "equipment properties in plant portal, Different levels of data missing. Different file formats, Segregation and separation of different language \n", + "formats, metadata, and migrated documents in smart plant portal). \n", + "● Used Task, Thread and Parallel process and optimized codes with Singleton and Factory Design pattern. Excel dynamic read and write with \n", + "formatting using closedXML, OpenXML, EPPlus, Excel Data Reader. \n", + "● Key Achievement – Computation has reduced time significantly for a large dataset and customer delivery satisfaction was achieved on-time. \n", + "SPI (Smart Plant Integration) and SPEC [ Covestro, IPEP (Data analytics team)] \n", + "● Data Comparison of migrating data from oracle to SQL Server. Generation of Excel Data and its comparison using EPPlus and generating reports. \n", + "Created Custom controls and User controls, Delegation of custom and user controls, Background task and multithreading with parameterized \n", + "arguments, async and await tasks, a comparison using multi and different primary keys also with dynamic and different key columns. Data view \n", + "sync. Comparison checks for BLOB data and other Hash File data. \n", + "● Implemented Task, Thread and Parallel process and optimized codes with Singleton and Factory Design pattern. Excel dynamic read and write \n", + "with formatting using closedXML, EPPlus, ExcelDataReader and Dataset in Visual Studio. Logging facility in python and used data frames. \n", + "● Key Achievement – With multithreading and parallel processing output time has been significantly improved by more than 90%. Worked closely \n", + "with cross-functional teams including plant engineers, data owners and site engineers to design, build and deliver end-to end solutions to their \n", + "individual data conversion and wrangling problems. \n", + "Software Engineer in Quantum Mutual Fund worked in Financial Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Aug 2018 - Jan 2020 \n", + "(Role – Full Stack Developer/ Data Engineer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumba \n", + "Invest Online (INON) - Backend Developer \n", + "● Developed business logic for investment in Q-MF & transaction, Re-Purchase, Redemption, Switch, New Purchase, STP, SWP, SIP. \n", + "● Optimized backend SQL code for Investors, used to do KYC according to their citizenship with different criteria & process form in different queues. \n", + "Software Engineer in Smart Solutions worked in CRM, FMCG Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Oct 2013 - July 2018 \n", + "(Role – Full Stack Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumbai \n", + "Inventory management and services - Backend Developer \n", + "● Capturing, managing, and maintaining inventories and managing. Assigning blocks and holding inventories. \n", + "Graduate Engineer Trainee in Godrej & Boyce worked in CRM Domain \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "Oct 2012 - Sept 2013 \n", + "(Role – Full Stack Developer) \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Mumbai \n", + "Timespan- Attendance and Leave management system, Assets management system & Drawer depository safe - Application \n", + "● Capturing, managing, and maintaining attendance and leaves for the employee in the company. Migrating assets and system information to \n", + "standard format. \n", + "CERTIFICATION AND LINKS (Recent) \n", + "● LinkedIn & Pluralsight Certificates - #Using Python with Excel #Data Wrangling with Pandas for Data Engineers\u001b[0m\u001b[32;1m\u001b[1;3mKrishna Dipayan Bhunia was working as a Graduate Engineer Trainee in Godrej & Boyce in the CRM domain from October 2012 to September 2013.\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -1000,10 +1289,10 @@ "data": { "text/plain": [ "{'input': 'Retrieve relevant documents for: where Krishna was working on 2012',\n", - " 'output': 'Based on the information provided by the tool, Krishna Dipayan Bhunia was a Senior Software Engineer and Data Engineer with over 12 years of experience in various industries like CRM, Oil & Gas, Financial, and FMCG. He specializes in data engineering, analysis, and visualization using Python libraries such as NumPy and Pandas.\\n\\nIn 2012, Krishna was working as a Graduate Engineer Trainee in Godrej & Boyce, which is a company in the CRM domain.\\n\\nHere is the final answer:\\n\\nIn 2012, Krishna Dipayan Bhunia was working as a Graduate Engineer Trainee in Godrej & Boyce, which is a company in the CRM domain.'}" + " 'output': 'Krishna Dipayan Bhunia was working as a Graduate Engineer Trainee in Godrej & Boyce in the CRM domain from October 2012 to September 2013.'}" ] }, - "execution_count": 42, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } From d6c5b9557b1c5ddba4efa08d5ee443fee0669a1b Mon Sep 17 00:00:00 2001 From: Krishna Bhunia Date: Thu, 17 Oct 2024 12:14:31 +0530 Subject: [PATCH 8/9] diagrams --- diagrams/Chatbot Database.drawio | 67 ++++++++++++++++++ ...s_Copilot_ Chatbot Database Modelling.pptx | Bin 0 -> 38337 bytes 2 files changed, 67 insertions(+) create mode 100644 diagrams/Chatbot Database.drawio create mode 100644 diagrams/Mes_Copilot_ Chatbot Database Modelling.pptx diff --git a/diagrams/Chatbot Database.drawio b/diagrams/Chatbot Database.drawio new file mode 100644 index 00000000..d46cde7c --- /dev/null +++ b/diagrams/Chatbot Database.drawio @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/diagrams/Mes_Copilot_ Chatbot Database Modelling.pptx b/diagrams/Mes_Copilot_ Chatbot Database Modelling.pptx new file mode 100644 index 0000000000000000000000000000000000000000..d38e40faecad57be15809981488f39f9f0f89cad GIT binary patch literal 38337 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�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 literal 0 HcmV?d00001 From c2c3152d7fd6aafc94f08f13f9bfa60a96844d3d Mon Sep 17 00:00:00 2001 From: Krishna Bhunia Date: Thu, 17 Oct 2024 14:50:05 +0530 Subject: [PATCH 9/9] ppts --- Documents/Chatbot Database.drawio | 64 ++++++++++++++++++ ...s_Copilot_ Chatbot Database Modelling.pptx | Bin Documents/chatbot history-Workflow_02 2.pptx | Bin 0 -> 58172 bytes .../diagrams}/Chatbot Database.drawio | 0 ...s_Copilot_ Chatbot Database Modelling.pptx | Bin 0 -> 38337 bytes 5 files changed, 64 insertions(+) create mode 100644 Documents/Chatbot Database.drawio rename {diagrams => Documents}/Mes_Copilot_ Chatbot Database Modelling.pptx (100%) create mode 100644 Documents/chatbot history-Workflow_02 2.pptx rename {diagrams => Documents/diagrams}/Chatbot Database.drawio (100%) create mode 100644 Documents/diagrams/Mes_Copilot_ Chatbot Database Modelling.pptx diff --git a/Documents/Chatbot Database.drawio b/Documents/Chatbot Database.drawio new file mode 100644 index 00000000..6f155eaf --- /dev/null +++ b/Documents/Chatbot Database.drawio @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/diagrams/Mes_Copilot_ Chatbot Database Modelling.pptx b/Documents/Mes_Copilot_ Chatbot Database Modelling.pptx similarity index 100% rename from diagrams/Mes_Copilot_ Chatbot Database Modelling.pptx rename to Documents/Mes_Copilot_ Chatbot Database Modelling.pptx diff --git a/Documents/chatbot history-Workflow_02 2.pptx b/Documents/chatbot history-Workflow_02 2.pptx new file mode 100644 index 0000000000000000000000000000000000000000..44eb9662cecbb44603202d81a707e22543b8c87e GIT binary patch literal 58172 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 literal 0 HcmV?d00001 diff --git a/diagrams/Chatbot Database.drawio b/Documents/diagrams/Chatbot Database.drawio similarity index 100% rename from diagrams/Chatbot Database.drawio rename to Documents/diagrams/Chatbot Database.drawio diff --git a/Documents/diagrams/Mes_Copilot_ Chatbot Database Modelling.pptx b/Documents/diagrams/Mes_Copilot_ Chatbot Database Modelling.pptx new file mode 100644 index 0000000000000000000000000000000000000000..d38e40faecad57be15809981488f39f9f0f89cad GIT binary patch literal 38337 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�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 literal 0 HcmV?d00001