{ "cells": [ { "cell_type": "markdown", "id": "dfe37963-1af6-44fc-a841-8e462443f5e6", "metadata": {}, "source": [ "## Expert Knowledge Worker\n", "\n", "### A question answering agent that is an expert knowledge worker\n", "### To be used by employees of Insurellm, an Insurance Tech company\n", "### The agent needs to be accurate and the solution should be low cost.\n", "\n", "This project will use RAG (Retrieval Augmented Generation) to ensure our question/answering assistant has high accuracy.\n", "\n", "This first implementation will use a simple, brute-force type of RAG.." ] }, { "cell_type": "code", "execution_count": 6, "id": "ba2779af-84ef-4227-9e9e-6eaf0df87e77", "metadata": {}, "outputs": [], "source": [ "# imports\n", "\n", "import os\n", "import glob\n", "from dotenv import load_dotenv\n", "import gradio as gr" ] }, { "cell_type": "code", "execution_count": 7, "id": "802137aa-8a74-45e0-a487-d1974927d7ca", "metadata": {}, "outputs": [], "source": [ "# imports for langchain, plotly and Chroma\n", "\n", "from langchain.document_loaders import DirectoryLoader, TextLoader\n", "from langchain.text_splitter import CharacterTextSplitter\n", "from langchain.schema import Document\n", "from langchain_openai import OpenAIEmbeddings, ChatOpenAI\n", "from langchain_chroma import Chroma\n", "import matplotlib.pyplot as plt\n", "from sklearn.manifold import TSNE\n", "import numpy as np\n", "import plotly.graph_objects as go\n", "from langchain.memory import ConversationBufferMemory\n", "from langchain.chains import ConversationalRetrievalChain" ] }, { "cell_type": "code", "execution_count": 8, "id": "58c85082-e417-4708-9efe-81a5d55d1424", "metadata": {}, "outputs": [], "source": [ "# price is a factor for our company, so we're going to use a low cost model\n", "\n", "MODEL = \"gpt-4o-mini\"\n", "db_name = \"vector_db\"" ] }, { "cell_type": "code", "execution_count": 9, "id": "ee78efcb-60fe-449e-a944-40bab26261af", "metadata": {}, "outputs": [], "source": [ "# Load environment variables in a file called .env\n", "\n", "load_dotenv()\n", "os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY', 'your-key-if-not-using-env')" ] }, { "cell_type": "code", "execution_count": 10, "id": "730711a9-6ffe-4eee-8f48-d6cfb7314905", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Created a chunk of size 1088, which is longer than the specified 1000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Total number of chunks: 123\n", "Document types found: {'contracts', 'employees', 'company', 'products'}\n" ] } ], "source": [ "# Read in documents using LangChain's loaders\n", "# Take everything in all the sub-folders of our knowledgebase\n", "\n", "folders = glob.glob(\"knowledge-base/*\")\n", "\n", "def add_metadata(doc, doc_type):\n", " doc.metadata[\"doc_type\"] = doc_type\n", " return doc\n", "\n", "# With thanks to Jon R, a student on the course, for this fix needed for some users \n", "text_loader_kwargs={'autodetect_encoding': True}\n", "\n", "documents = []\n", "for folder in folders:\n", " doc_type = os.path.basename(folder)\n", " loader = DirectoryLoader(folder, glob=\"**/*.md\", loader_cls=TextLoader, loader_kwargs=text_loader_kwargs)\n", " folder_docs = loader.load()\n", " documents.extend([add_metadata(doc, doc_type) for doc in folder_docs])\n", "\n", "text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200)\n", "chunks = text_splitter.split_documents(documents)\n", "\n", "print(f\"Total number of chunks: {len(chunks)}\")\n", "print(f\"Document types found: {set(doc.metadata['doc_type'] for doc in documents)}\")" ] }, { "cell_type": "markdown", "id": "77f7d2a6-ccfa-425b-a1c3-5e55b23bd013", "metadata": {}, "source": [ "## A sidenote on Embeddings, and \"Auto-Encoding LLMs\"\n", "\n", "We will be mapping each chunk of text into a Vector that represents the meaning of the text, known as an embedding.\n", "\n", "OpenAI offers a model to do this, which we will use by calling their API with some LangChain code.\n", "\n", "This model is an example of an \"Auto-Encoding LLM\" which generates an output given a complete input.\n", "It's different to all the other LLMs we've discussed today, which are known as \"Auto-Regressive LLMs\", and generate future tokens based only on past context.\n", "\n", "Another example of an Auto-Encoding LLMs is BERT from Google. In addition to embedding, Auto-encoding LLMs are often used for classification.\n", "\n", "More details in the resources." ] }, { "cell_type": "code", "execution_count": 11, "id": "78998399-ac17-4e28-b15f-0b5f51e6ee23", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "⚠️ It looks like you upgraded from a version below 0.6 and could benefit from vacuuming your database. Run chromadb utils vacuum --help for more information.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Vectorstore created with 123 documents\n" ] } ], "source": [ "# Put the chunks of data into a Vector Store that associates a Vector Embedding with each chunk\n", "# Chroma is a popular open source Vector Database based on SQLLite\n", "\n", "embeddings = OpenAIEmbeddings()\n", "\n", "# Delete if already exists\n", "\n", "if os.path.exists(db_name):\n", " Chroma(persist_directory=db_name, embedding_function=embeddings).delete_collection()\n", "\n", "# Create vectorstore\n", "\n", "vectorstore = Chroma.from_documents(documents=chunks, embedding=embeddings, persist_directory=db_name)\n", "print(f\"Vectorstore created with {vectorstore._collection.count()} documents\")" ] }, { "cell_type": "code", "execution_count": 12, "id": "ff2e7687-60d4-4920-a1d7-a34b9f70a250", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "There are 123 vectors with 1,536 dimensions in the vector store\n" ] } ], "source": [ "# Let's investigate the vectors\n", "\n", "collection = vectorstore._collection\n", "count = collection.count()\n", "\n", "sample_embedding = collection.get(limit=1, include=[\"embeddings\"])[\"embeddings\"][0]\n", "dimensions = len(sample_embedding)\n", "print(f\"There are {count:,} vectors with {dimensions:,} dimensions in the vector store\")" ] }, { "cell_type": "markdown", "id": "b0d45462-a818-441c-b010-b85b32bcf618", "metadata": {}, "source": [ "## Visualizing the Vector Store\n", "\n", "Let's take a minute to look at the documents and their embedding vectors to see what's going on." ] }, { "cell_type": "code", "execution_count": 13, "id": "b98adf5e-d464-4bd2-9bdf-bc5b6770263b", "metadata": {}, "outputs": [], "source": [ "# Prework (with thanks to Jon R for identifying and fixing a bug in this!)\n", "\n", "result = collection.get(include=['embeddings', 'documents', 'metadatas'])\n", "vectors = np.array(result['embeddings'])\n", "documents = result['documents']\n", "metadatas = result['metadatas']\n", "doc_types = [metadata['doc_type'] for metadata in metadatas]\n", "colors = [['blue', 'green', 'red', 'orange'][['products', 'employees', 'contracts', 'company'].index(t)] for t in doc_types]" ] }, { "cell_type": "code", "execution_count": 14, "id": "427149d5-e5d8-4abd-bb6f-7ef0333cca21", "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hoverinfo": "text", "marker": { "color": [ "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "orange", "orange", "orange", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green" ], "opacity": 0.8, "size": 5 }, "mode": "markers", "text": [ "Type: products
Text: # Product Summary\n\n# Rellm: AI-Powered Enterprise Reinsurance Solution\n\n## Summary\n\nRellm is an inno...", "Type: products
Text: ### Seamless Integrations\nRellm's architecture is designed for effortless integration with existing ...", "Type: products
Text: ### Regulatory Compliance Tools\nRellm includes built-in compliance tracking features to help organiz...", "Type: products
Text: Join the growing number of organizations leveraging Rellm to enhance their reinsurance processes whi...", "Type: products
Text: Experience the future of reinsurance with Rellm, where innovation meets reliability. Let Insurellm h...", "Type: products
Text: # Product Summary\n\n# Markellm\n\n## Summary\n\nMarkellm is an innovative two-sided marketplace designed ...", "Type: products
Text: - **User-Friendly Interface**: Designed with user experience in mind, Markellm features an intuitive...", "Type: products
Text: - **Customer Support**: Our dedicated support team is always available to assist both consumers and ...", "Type: products
Text: ### For Insurance Companies:\n- **Basic Listing Fee**: $199/month for a featured listing on the platf...", "Type: products
Text: ### Q3 2025\n- Initiate a comprehensive marketing campaign targeting both consumers and insurers to i...", "Type: products
Text: # Product Summary\n\n# Homellm\n\n## Summary\nHomellm is an innovative home insurance product developed b...", "Type: products
Text: ### 2. Dynamic Pricing Model\nWith Homellm's innovative dynamic pricing model, insurance providers ca...", "Type: products
Text: ### 5. Multi-Channel Integration\nHomellm seamlessly integrates into existing insurance platforms, pr...", "Type: products
Text: - **Basic Tier:** Starting at $5,000/month for small insurers with basic integration features.\n- **S...", "Type: products
Text: All tiers include a comprehensive training program and ongoing updates to ensure optimal performance...", "Type: products
Text: With Homellm, Insurellm is committed to transforming the landscape of home insurance, ensuring both ...", "Type: products
Text: # Product Summary\n\n# Carllm\n\n## Summary\n\nCarllm is an innovative auto insurance product developed by...", "Type: products
Text: - **Instant Quoting**: With Carllm, insurance companies can offer near-instant quotes to customers, ...", "Type: products
Text: - **Mobile Integration**: Carllm is designed to work seamlessly with mobile applications, providing ...", "Type: products
Text: - **Professional Tier**: $2,500/month\n - For medium-sized companies.\n - All Basic Tier features pl...", "Type: products
Text: ### Q2 2025: Customer Experience Improvements\n- Launch of a new **mobile app** for end-users.\n- Intr...", "Type: contracts
Text: # Contract with GreenField Holdings for Markellm\n\n**Effective Date:** November 15, 2023 \n**Contract...", "Type: contracts
Text: ## Renewal\n1. **Automatic Renewal**: This contract will automatically renew for sequential one-year ...", "Type: contracts
Text: ## Features\n1. **AI-Powered Matching**: Access to advanced algorithms that connect GreenField Holdin...", "Type: contracts
Text: ## Support\n1. **Customer Support Access**: The Client will have access to dedicated support through ...", "Type: contracts
Text: **Signatures:** \n_________________________ _________________________ \n**...", "Type: contracts
Text: # Contract with Apex Reinsurance for Rellm: AI-Powered Enterprise Reinsurance Solution\n\n## Terms\n\n1....", "Type: contracts
Text: ## Renewal\n\n1. **Automatic Renewal**: This Agreement will automatically renew for successive one-yea...", "Type: contracts
Text: 2. **Seamless Integrations**: The architecture of Rellm allows for easy integration with existing sy...", "Type: contracts
Text: 1. **Technical Support**: Provider shall offer dedicated technical support to the Client via phone, ...", "Type: contracts
Text: **Insurellm, Inc.** \n_____________________________ \nAuthorized Signature \nDate: ________________...", "Type: contracts
Text: # Contract with Greenstone Insurance for Homellm\n\n---\n\n## Terms\n\n1. **Parties**: This Contract (\"Agr...", "Type: contracts
Text: 4. **Payment Terms**: \n - The Customer shall pay an amount of $10,000 per month for the Standard T...", "Type: contracts
Text: ---\n\n## Features\n\n- **AI-Powered Risk Assessment**: Customer will have access to enhanced risk evalu...", "Type: contracts
Text: - **Customer Portal**: A dedicated portal will be provided, allowing the Customer's clients to manag...", "Type: contracts
Text: ______________________________ \n[Name], [Title] \nDate: ______________________\n\n**For Greenstone In...", "Type: contracts
Text: # Contract with Roadway Insurance Inc. for Carllm\n\n---\n\n## Terms\n\n1. **Agreement Effective Date**: T...", "Type: contracts
Text: ---\n\n## Renewal\n\n1. **Automatic Renewal**: This agreement will automatically renew for an additional...", "Type: contracts
Text: ---\n\n## Features\n\n1. **Access to Core Features**: Roadway Insurance Inc. will have access to all Pro...", "Type: contracts
Text: ---\n\n## Support\n\n1. **Technical Support**: Roadway Insurance Inc. will receive priority technical su...", "Type: contracts
Text: # Contract with Stellar Insurance Co. for Rellm\n\n## Terms\nThis contract is made between **Insurellm*...", "Type: contracts
Text: ### Termination\nEither party may terminate this agreement with a **30-day written notice**. In the e...", "Type: contracts
Text: ## Features\nStellar Insurance Co. will receive access to the following features of the Rellm product...", "Type: contracts
Text: ## Support\nInsurellm provides Stellar Insurance Co. with the following support services:\n\n- **24/7 T...", "Type: contracts
Text: # Contract with TechDrive Insurance for Carllm\n\n**Contract Date:** October 1, 2024 \n**Contract Dura...", "Type: contracts
Text: ## Renewal\n\n1. **Automatic Renewal**: This contract shall automatically renew for additional one-yea...", "Type: contracts
Text: ## Support\n\n1. **Customer Support**: Insurellm will provide 24/7 customer support to TechDrive Insur...", "Type: contracts
Text: **TechDrive Insurance Representative:** \nName: Sarah Johnson \nTitle: Operations Director \nDate: _...", "Type: contracts
Text: # Contract with Belvedere Insurance for Markellm\n\n## Terms\nThis Contract (\"Agreement\") is made and e...", "Type: contracts
Text: ## Renewal\n1. **Renewal Terms**: This Agreement may be renewed for additional one-year terms upon mu...", "Type: contracts
Text: ## Features\n1. **AI-Powered Matching**: Belvedere Insurance will benefit from Markellm's AI-powered ...", "Type: contracts
Text: ## Support\n1. **Technical Support**: Technical support will be available from 9 AM to 7 PM EST, Mond...", "Type: contracts
Text: **Belvedere Insurance** \nSignature: ______________________ \nName: [Authorized Signatory] \nTitle: ...", "Type: contracts
Text: # Contract with Velocity Auto Solutions for Carllm\n\n**Contract Date:** October 1, 2023 \n**Contract ...", "Type: contracts
Text: ## Renewal\n\n1. **Automatic Renewal**: This contract will automatically renew for successive 12-month...", "Type: contracts
Text: ## Support\n\n1. **Customer Support**: Velocity Auto Solutions will have access to Insurellm’s custome...", "Type: contracts
Text: # Contract with GreenValley Insurance for Homellm\n\n**Contract Date:** October 6, 2023 \n**Contract N...", "Type: contracts
Text: 4. **Confidentiality:** Both parties agree to maintain the confidentiality of proprietary informatio...", "Type: contracts
Text: 1. **AI-Powered Risk Assessment:** Access to advanced AI algorithms for real-time risk evaluations.\n...", "Type: contracts
Text: 3. **Regular Updates:** Insurellm will offer ongoing updates and enhancements to the Homellm platfor...", "Type: contracts
Text: # Contract with EverGuard Insurance for Rellm: AI-Powered Enterprise Reinsurance Solution\n\n**Contrac...", "Type: contracts
Text: 4. **Usage Rights**: EverGuard Insurance is granted a non-exclusive, non-transferable license to acc...", "Type: contracts
Text: 1. **Core Functionality**: Rellm provides EverGuard Insurance with advanced AI-driven analytics, sea...", "Type: contracts
Text: 1. **Customer Support**: Insurellm will provide EverGuard Insurance with 24/7 customer support, incl...", "Type: contracts
Text: ---\n\n**Signatures** \n**For Insurellm**: __________________________ \n**Name**: John Smith \n**Title...", "Type: contracts
Text: # Contract with BrightWay Solutions for Markellm\n\n**Contract Date:** October 5, 2023 \n**Contract ID...", "Type: contracts
Text: 3. **Service Level Agreement (SLA):** \n Insurellm commits to a 99.9% uptime for the platform with...", "Type: contracts
Text: 2. **Real-Time Quote Availability:** \n Consumers sourced via BrightWay Solutions will receive rea...", "Type: contracts
Text: 3. **Training and Onboarding:** \n Insurellm agrees to provide one free training session on how to...", "Type: contracts
Text: # Contract with Pinnacle Insurance Co. for Homellm\n\n## Terms\nThis contract (\"Contract\") is entered i...", "Type: contracts
Text: ## Renewal\n1. **Renewal Terms**: At the end of the initial term, this Contract shall automatically r...", "Type: contracts
Text: ## Features\n1. **AI-Powered Risk Assessment**: Utilized for tailored underwriting decisions specific...", "Type: contracts
Text: ## Support\n1. **Technical Support**: Insurellm shall provide 24/7 technical support via an email and...", "Type: company
Text: # Overview of Insurellm\n\nInsurellm is an innovative insurance tech firm with 200 employees across th...", "Type: company
Text: # Careers at Insurellm\n\nInsurellm is hiring! We are looking for talented software engineers, data sc...", "Type: company
Text: # About Insurellm\n\nInsurellm was founded by Avery Lancaster in 2015 as an insurance tech startup des...", "Type: employees
Text: # HR Record\n\n# Alex Chen\n\n## Summary\n- **Date of Birth:** March 15, 1990 \n- **Job Title:** Backend ...", "Type: employees
Text: ## Annual Performance History\n- **2020:** \n - Completed onboarding successfully. \n - Met expecta...", "Type: employees
Text: ## Compensation History\n- **2020:** Base Salary: $80,000 \n- **2021:** Base Salary Increase to $90,0...", "Type: employees
Text: Alex Chen continues to be a vital asset at Insurellm, contributing significantly to innovative backe...", "Type: employees
Text: # HR Record\n\n# Oliver Spencer\n\n## Summary\n- **Date of Birth**: May 14, 1990 \n- **Job Title**: Backe...", "Type: employees
Text: ## Annual Performance History\n- **2018**: **3/5** - Adaptable team player but still learning to take...", "Type: employees
Text: ## Compensation History\n- **March 2018**: Initial salary of $80,000.\n- **July 2019**: Salary increas...", "Type: employees
Text: # HR Record\n\n# Emily Tran\n\n## Summary\n- **Date of Birth:** March 18, 1991 \n- **Job Title:** Digital...", "Type: employees
Text: - **January 2017 - May 2018**: Marketing Intern \n - Supported the Marketing team by collaborating ...", "Type: employees
Text: - **2021**: \n - Performance Rating: Meets Expectations \n - Key Achievements: Contributed to the ...", "Type: employees
Text: - **Professional Development Goals**: \n - Emily Tran aims to become a Marketing Manager within the...", "Type: employees
Text: # HR Record\n\n# Jordan Blake\n\n## Summary\n- **Date of Birth:** March 15, 1993 \n- **Job Title:** Sales...", "Type: employees
Text: ## Annual Performance History\n- **2021:** First year at Insurellm; achieved 90% of monthly targets. ...", "Type: employees
Text: ## Other HR Notes\n- Jordan has shown an interest in continuing education, actively participating in ...", "Type: employees
Text: # Avery Lancaster\n\n## Summary\n- **Date of Birth**: March 15, 1985 \n- **Job Title**: Co-Founder & Ch...", "Type: employees
Text: - **2010 - 2013**: Business Analyst at Edge Analytics \n Prior to joining Innovate, Avery worked as...", "Type: employees
Text: - **2018**: **Exceeds Expectations** \n Under Avery’s pivoted vision, Insurellm launched two new su...", "Type: employees
Text: - **2022**: **Satisfactory** \n Avery focused on rebuilding team dynamics and addressing employee c...", "Type: employees
Text: ## Compensation History\n- **2015**: $150,000 base salary + Significant equity stake \n- **2016**: $1...", "Type: employees
Text: ## Other HR Notes\n- **Professional Development**: Avery has actively participated in leadership trai...", "Type: employees
Text: # HR Record\n\n# Maxine Thompson\n\n## Summary\n- **Date of Birth:** January 15, 1991 \n- **Job Title:** ...", "Type: employees
Text: ## Insurellm Career Progression\n- **January 2017 - October 2018**: **Junior Data Engineer** \n * Ma...", "Type: employees
Text: ## Annual Performance History\n- **2017**: *Meets Expectations* \n Maxine showed potential in her ro...", "Type: employees
Text: - **2021**: *Exceeds Expectations* \n Maxine spearheaded the transition to a new data warehousing s...", "Type: employees
Text: ## Compensation History\n- **2017**: $70,000 (Junior Data Engineer) \n- **2018**: $75,000 (Junior Dat...", "Type: employees
Text: # Samantha Greene\n\n## Summary\n- **Date of Birth:** October 14, 1990\n- **Job Title:** HR Generalist\n-...", "Type: employees
Text: ## Annual Performance History\n- **2020:** Exceeds Expectations \n Samantha Greene demonstrated exce...", "Type: employees
Text: ## Compensation History\n- **2020:** Base Salary - $55,000 \n The entry-level salary matched industr...", "Type: employees
Text: - **2023:** Base Salary - $70,000 \n Recognized for substantial improvement in employee relations m...", "Type: employees
Text: # HR Record\n\n# Alex Thomson\n\n## Summary\n- **Date of Birth:** March 15, 1995 \n- **Job Title:** Sales...", "Type: employees
Text: ## Annual Performance History \n- **2022** - Rated as \"Exceeds Expectations.\" Alex Thomson achieved ...", "Type: employees
Text: ## Other HR Notes\n- Alex Thomson is an active member of the Diversity and Inclusion committee at Ins...", "Type: employees
Text: # HR Record\n\n# Samuel Trenton\n\n## Summary\n- **Date of Birth:** April 12, 1989 \n- **Job Title:** Sen...", "Type: employees
Text: ## Annual Performance History\n- **2023:** Rating: 4.5/5 \n *Samuel exceeded expectations, successfu...", "Type: employees
Text: ## Compensation History\n- **2023:** Base Salary: $115,000 + Bonus: $15,000 \n *Annual bonus based o...", "Type: employees
Text: - **Engagement in Company Culture:** Regularly participates in team-building events and contributes ...", "Type: employees
Text: # HR Record\n\n# Alex Harper\n\n## Summary\n- **Date of Birth**: March 15, 1993 \n- **Job Title**: Sales ...", "Type: employees
Text: ## Annual Performance History \n- **2021**: \n - **Performance Rating**: 4.5/5 \n - **Key Achievem...", "Type: employees
Text: - **2022**: \n - **Base Salary**: $65,000 (Promotion to Senior SDR) \n - **Bonus**: $13,000 (20% o...", "Type: employees
Text: # HR Record\n\n# Jordan K. Bishop\n\n## Summary\n- **Date of Birth:** March 15, 1990\n- **Job Title:** Fro...", "Type: employees
Text: ## Annual Performance History\n- **2019:** Exceeds Expectations - Continuously delivered high-quality...", "Type: employees
Text: ## Compensation History\n- **June 2018:** Starting Salary - $85,000\n- **June 2019:** Salary Increase ...", "Type: employees
Text: ## Other HR Notes\n- Jordan K. Bishop has been an integral part of club initiatives, including the In...", "Type: employees
Text: # HR Record\n\n# Emily Carter\n\n## Summary\n- **Date of Birth:** August 12, 1990 \n- **Job Title:** Acco...", "Type: employees
Text: - **2017-2019:** Marketing Intern \n - Assisted with market research and campaign development for s...", "Type: employees
Text: ## Compensation History\n| Year | Base Salary | Bonus | Total Compensation |\n|------|--------...", "Type: employees
Text: Emily Carter exemplifies the kind of talent that drives Insurellm's success and is an invaluable ass..." ], "type": "scatter", "x": [ 2.1657162, 3.1730666, 2.6093218, 0.9760554, 1.5829921, -1.502056, -1.6475267, -2.0970237, -2.8454866, -1.1336951, 3.0455341, 4.2247596, 3.5648901, 3.7750776, 4.071412, 2.1002796, 0.48712072, 0.2535028, 0.48772058, 0.63742346, 0.09507624, 4.985659, 1.3742446, -3.0565479, -3.5384426, 6.7018948, 3.3001397, 2.6875143, 3.4703426, 4.1835494, 6.412118, 6.687027, 8.2987, 4.8522744, 5.7983127, 6.704851, 1.2646581, 1.0013753, 5.341151, 0.83427304, 5.8493323, 6.168578, 4.3580904, 4.952433, 1.1822518, 1.6216459, 0.45518562, 0.07464623, 4.315875, 1.3917989, -1.6257741, 4.5054626, 5.610689, 1.7168037, 1.7916934, 0.6309433, 7.136284, 6.861074, 4.666559, 6.471031, 3.7696128, 3.3220448, 3.4667997, 4.256106, 4.885667, 3.5421553, -1.1620731, -1.5396489, 3.5806115, 6.7179313, 1.3702773, 5.6253486, 5.1032844, 0.46429217, -0.3374502, 0.1380692, -5.9124765, -3.7052457, -7.6139197, -2.3142114, -5.7001595, -3.655375, -8.146216, -4.622249, -3.9909203, -6.309154, -3.9024904, -6.9799514, -7.408758, -7.1080527, -1.3712137, -1.4784863, -1.0967847, -0.95495355, -7.780253, -1.414888, -8.965691, -1.3963995, -2.5084875, -1.6108737, -7.2012467, -4.8719454, -3.915361, -5.9303107, -5.4783134, -7.5732207, -5.8132715, -8.001866, -6.185131, -5.659945, -6.9933453, -3.1655111, -7.3645425, -6.6463766, -7.3603125, -6.1931767, -3.243429, -8.316263, -6.6490607, -5.3815413, -3.8863237, -6.944586, -2.7584918 ], "y": [ -2.2858455, -2.5954487, -3.255285, -1.952671, -1.0404043, -2.724281, -3.0858693, -3.6287076, -3.6856368, -1.9495701, -0.47752023, -0.44162562, -0.39536428, 0.9614713, 0.99703586, -0.06835712, -3.3131993, -3.5417843, -4.274064, -4.443947, -2.3909652, -8.871979, -11.0559225, -5.51046, -4.071174, -10.519203, -6.0242324, -5.0040464, -2.8437192, -6.9033985, -10.194493, -7.5251117, -7.4085727, -0.71313965, -7.3723106, -10.843583, -8.815096, -9.933742, -2.3074007, -6.0303154, -4.6378036, -4.456969, -3.2670627, -4.2978406, -7.955099, -6.7722735, -7.1021113, -7.788864, -9.471096, -11.425577, -4.2800193, -7.489228, -10.296724, -7.9341655, -6.4485226, -6.711123, -6.9180026, -6.4256206, -1.2041736, -6.304998, -5.4404383, -4.6398587, -3.7173347, -4.878436, -5.757804, -9.002952, -6.6094403, -5.621317, -8.766795, -7.949551, -11.237369, -0.6103874, -7.3290896, -0.03201861, 0.784904, 0.12804477, 4.028084, 8.024907, 8.534479, 2.3654969, 3.8411138, 8.18064, 8.3410015, 5.1159697, 5.523928, 8.276803, 5.068528, 4.536683, 7.640538, 2.7487738, 4.28359, 6.1556892, 6.622451, 6.615961, 9.601874, 4.5007243, 5.3423653, 8.676644, 8.391149, 8.017775, 10.020563, 10.24286, 9.34176, 10.128047, 10.061192, 4.5264053, 7.413246, 4.0244913, 4.888229, 8.507648, 9.153973, 10.506807, 4.9900937, 7.634121, 6.725644, 3.3235862, 7.9584827, 9.460553, 2.5685325, 5.1685038, 6.5842724, 8.6220455, 2.6176505 ] } ], "layout": { "height": 600, "margin": { "b": 10, "l": 10, "r": 20, "t": 40 }, "scene": { "xaxis": { "title": { "text": "x" } }, "yaxis": { "title": { "text": "y" } } }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "2D Chroma Vector Store Visualization" }, "width": 800, "xaxis": { "autorange": true, "range": [ -10.015192118677923, 9.348201118677924 ], "type": "linear" }, "yaxis": { "autorange": true, "range": [ -12.804586914198378, 11.885816914198378 ], "type": "linear" } } }, "image/png": "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", "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# We humans find it easier to visalize things in 2D!\n", "# Reduce the dimensionality of the vectors to 2D using t-SNE\n", "# (t-distributed stochastic neighbor embedding)\n", "\n", "tsne = TSNE(n_components=2, random_state=42)\n", "reduced_vectors = tsne.fit_transform(vectors)\n", "\n", "# Create the 2D scatter plot\n", "fig = go.Figure(data=[go.Scatter(\n", " x=reduced_vectors[:, 0],\n", " y=reduced_vectors[:, 1],\n", " mode='markers',\n", " marker=dict(size=5, color=colors, opacity=0.8),\n", " text=[f\"Type: {t}
Text: {d[:100]}...\" for t, d in zip(doc_types, documents)],\n", " hoverinfo='text'\n", ")])\n", "\n", "fig.update_layout(\n", " title='2D Chroma Vector Store Visualization',\n", " scene=dict(xaxis_title='x',yaxis_title='y'),\n", " width=800,\n", " height=600,\n", " margin=dict(r=20, b=10, l=10, t=40)\n", ")\n", "\n", "fig.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "e1418e88-acd5-460a-bf2b-4e6efc88e3dd", "metadata": {}, "outputs": [], "source": [ "# Let's try 3D!\n", "\n", "tsne = TSNE(n_components=3, random_state=42)\n", "reduced_vectors = tsne.fit_transform(vectors)\n", "\n", "# Create the 3D scatter plot\n", "fig = go.Figure(data=[go.Scatter3d(\n", " x=reduced_vectors[:, 0],\n", " y=reduced_vectors[:, 1],\n", " z=reduced_vectors[:, 2],\n", " mode='markers',\n", " marker=dict(size=5, color=colors, opacity=0.8),\n", " text=[f\"Type: {t}
Text: {d[:100]}...\" for t, d in zip(doc_types, documents)],\n", " hoverinfo='text'\n", ")])\n", "\n", "fig.update_layout(\n", " title='3D Chroma Vector Store Visualization',\n", " scene=dict(xaxis_title='x', yaxis_title='y', zaxis_title='z'),\n", " width=900,\n", " height=700,\n", " margin=dict(r=20, b=10, l=10, t=40)\n", ")\n", "\n", "fig.show()" ] }, { "cell_type": "markdown", "id": "9468860b-86a2-41df-af01-b2400cc985be", "metadata": {}, "source": [ "## Time to use LangChain to bring it all together" ] }, { "cell_type": "code", "execution_count": null, "id": "129c7d1e-0094-4479-9459-f9360b95f244", "metadata": {}, "outputs": [], "source": [ "# create a new Chat with OpenAI\n", "llm = ChatOpenAI(temperature=0.7, model_name=MODEL)\n", "\n", "# set up the conversation memory for the chat\n", "memory = ConversationBufferMemory(memory_key='chat_history', return_messages=True)\n", "\n", "# the retriever is an abstraction over the VectorStore that will be used during RAG\n", "retriever = vectorstore.as_retriever()\n", "\n", "# putting it together: set up the conversation chain with the GPT 3.5 LLM, the vector store and memory\n", "conversation_chain = ConversationalRetrievalChain.from_llm(llm=llm, retriever=retriever, memory=memory)" ] }, { "cell_type": "code", "execution_count": null, "id": "968e7bf2-e862-4679-a11f-6c1efb6ec8ca", "metadata": {}, "outputs": [], "source": [ "# Let's try a simple question\n", "\n", "query = \"Please explain what Insurellm is in a couple of sentences\"\n", "result = conversation_chain.invoke({\"question\": query})\n", "print(result[\"answer\"])" ] }, { "cell_type": "markdown", "id": "bbbcb659-13ce-47ab-8a5e-01b930494964", "metadata": {}, "source": [ "## Now we will bring this up in Gradio using the Chat interface -\n", "\n", "A quick and easy way to prototype a chat with an LLM" ] }, { "cell_type": "code", "execution_count": null, "id": "c3536590-85c7-4155-bd87-ae78a1467670", "metadata": {}, "outputs": [], "source": [ "# Wrapping that in a function\n", "\n", "def chat(question, history):\n", " result = conversation_chain.invoke({\"question\": question})\n", " return result[\"answer\"]" ] }, { "cell_type": "code", "execution_count": null, "id": "b252d8c1-61a8-406d-b57a-8f708a62b014", "metadata": {}, "outputs": [], "source": [ "# And in Gradio:\n", "\n", "view = gr.ChatInterface(chat).launch()" ] }, { "cell_type": "code", "execution_count": null, "id": "b55e9abb-e1da-46c5-acba-911868aee329", "metadata": {}, "outputs": [], "source": [ "# Let's investigate what gets sent behind the scenes\n", "\n", "from langchain_core.callbacks import StdOutCallbackHandler\n", "\n", "llm = ChatOpenAI(temperature=0.7, model_name=MODEL)\n", "\n", "memory = ConversationBufferMemory(memory_key='chat_history', return_messages=True)\n", "\n", "retriever = vectorstore.as_retriever()\n", "\n", "conversation_chain = ConversationalRetrievalChain.from_llm(llm=llm, retriever=retriever, memory=memory, callbacks=[StdOutCallbackHandler()])\n", "\n", "query = \"Who received the prestigious IIOTY award in 2023?\"\n", "result = conversation_chain.invoke({\"question\": query})\n", "answer = result[\"answer\"]\n", "print(\"\\nAnswer:\", answer)" ] }, { "cell_type": "code", "execution_count": null, "id": "2136153b-d2f6-4c58-a0e3-78c3a932cf55", "metadata": {}, "outputs": [], "source": [ "# create a new Chat with OpenAI\n", "llm = ChatOpenAI(temperature=0.7, model_name=MODEL)\n", "\n", "# set up the conversation memory for the chat\n", "memory = ConversationBufferMemory(memory_key='chat_history', return_messages=True)\n", "\n", "# the retriever is an abstraction over the VectorStore that will be used during RAG; k is how many chunks to use\n", "retriever = vectorstore.as_retriever(search_kwargs={\"k\": 25})\n", "\n", "# putting it together: set up the conversation chain with the GPT 3.5 LLM, the vector store and memory\n", "conversation_chain = ConversationalRetrievalChain.from_llm(llm=llm, retriever=retriever, memory=memory)" ] }, { "cell_type": "code", "execution_count": null, "id": "5c2bfa3c-810b-441b-90d1-31533f14b1e3", "metadata": {}, "outputs": [], "source": [ "def chat(question, history):\n", " result = conversation_chain.invoke({\"question\": question})\n", " return result[\"answer\"]" ] }, { "cell_type": "code", "execution_count": null, "id": "c736f33b-941e-4853-8eaf-2003bd988b18", "metadata": {}, "outputs": [], "source": [ "view = gr.ChatInterface(chat).launch()" ] }, { "cell_type": "markdown", "id": "644753e7-17f3-4999-a37a-b6aebf1e4579", "metadata": {}, "source": [ "# Exercises\n", "\n", "Try applying this to your own folder of data, so that you create a personal knowledge worker, an expert on your own information!" ] }, { "cell_type": "code", "execution_count": null, "id": "30b4745a-0a6c-4544-b78b-c827cfec1fb9", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.10" } }, "nbformat": 4, "nbformat_minor": 5 }