{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":64148,"databundleVersionId":7669720,"sourceType":"competition"},{"sourceId":26140,"sourceType":"modelInstanceVersion","modelInstanceId":22003}],"dockerImageVersionId":30684,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Google – AI Assistants for Data Tasks with Gemma\n\n![gemma.png](attachment:75841545-49a6-41ca-a790-4f2198167d5f.png)","metadata":{},"attachments":{"75841545-49a6-41ca-a790-4f2198167d5f.png":{"image/png":"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ioKAuwhgG7W77AVtQcBtBODAuM1i0BcE3EQAU0hushZ0BQFXEYAD4ypzQVkQcBEBbENykbGgKgi4jwAcGPfZDBqDgDsICFXBGhh3mApagoAbCcCBcaPVoDMIuIEAey+YQnKDpaAjCLiSABwYV5oNSoOACwhYCkZgXGAmqAgCbiUAB8atloPeIJDgBOQADEZgEtxKUA8E3EsADox7bQfNQSDxCcCBSXwbQUMQcCkBODAuNRzUBoFEJ4AFvIluIegHAu4mAAfG3faD9iCQsARoFzXtQ0IAARAAgegQgAMTHa6QCgIpT4BO4lWxCynlfwwAAASiRgAOTNTQQjAIgAAIgAAIgEC0CMCBiRZZyAUBEAABEAABEIgaATgwUUMLwSCQ4gR4DQx2IaX4DwGaDwLRIwAHJnpsIRkEUpwA1vCm+A8Amg8CIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACLiXw/7DuEIkmBK4FAAAAAElFTkSuQmCC"}}},{"cell_type":"markdown","source":"## Let's build a notebook using Gemma!\nIn this project, we'll focus on creating a notebook that showcases the capabilities of the Gemma LLM. Our specific aim is to demonstrate how Gemma can be used to:\n\n- Answer common questions about the Kaggle platform.\nThis will be a valuable resource for Kaggle users of all experience levels.","metadata":{}},{"cell_type":"markdown","source":"## RAG: Making Data Science Clearer\nThis project explores the exciting potential of Retrieval-Augmented Generation (RAG) to revolutionize how we explain fundamental data science concepts. We'll investigate how RAG can empower us to:\n\n- **Enhance Clarity**: By incorporating knowledge from external sources, RAG can ensure explanations are accurate and up-to-date.\n- **Boost Engagement**: RAG can tailor explanations to the user's level of understanding, making data science more accessible.\n- **Increase Efficiency**: RAG can automate explanation generation, freeing up valuable time for data scientists.","metadata":{}},{"cell_type":"markdown","source":"# Step 1: Install Packages\nFirst, let's install the necessary packages using pip:","metadata":{}},{"cell_type":"code","source":"%pip install --upgrade --quiet transformers accelerate bitsandbytes langchain sentence-transformers chromadb gradio huggingface_hub ","metadata":{"execution":{"iopub.status.busy":"2024-04-14T20:17:51.573281Z","iopub.execute_input":"2024-04-14T20:17:51.574761Z","iopub.status.idle":"2024-04-14T20:18:44.492672Z","shell.execute_reply.started":"2024-04-14T20:17:51.574703Z","shell.execute_reply":"2024-04-14T20:18:44.491565Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### A restart is recommended to ensure the Gradio package functions smoothly. This will help avoid errors.","metadata":{}},{"cell_type":"markdown","source":"# Step 2: Importing Libraries\nNext, let's import the libraries we'll need:","metadata":{}},{"cell_type":"code","source":"import os\nimport gradio as gr\nfrom langchain.text_splitter import RecursiveCharacterTextSplitter\nfrom langchain_community.document_loaders import WebBaseLoader\nfrom langchain_community.vectorstores import Chroma\nfrom langchain.chains import ConversationalRetrievalChain\nfrom langchain_community.embeddings.sentence_transformer import SentenceTransformerEmbeddings\nfrom langchain_community.llms import HuggingFaceEndpoint\nfrom kaggle_secrets import UserSecretsClient","metadata":{"execution":{"iopub.status.busy":"2024-04-14T20:18:44.495659Z","iopub.execute_input":"2024-04-14T20:18:44.496138Z","iopub.status.idle":"2024-04-14T20:18:48.704500Z","shell.execute_reply.started":"2024-04-14T20:18:44.496092Z","shell.execute_reply":"2024-04-14T20:18:48.703149Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Step 3: Load Data\nLet's load the data from a web-based source. In this example, we'll use a data science glossary:","metadata":{}},{"cell_type":"code","source":"loader = WebBaseLoader(\"https://www.datascienceglossary.org/\")\ndata = loader.load()","metadata":{"execution":{"iopub.status.busy":"2024-04-14T20:18:48.706235Z","iopub.execute_input":"2024-04-14T20:18:48.707160Z","iopub.status.idle":"2024-04-14T20:18:49.905380Z","shell.execute_reply.started":"2024-04-14T20:18:48.707116Z","shell.execute_reply":"2024-04-14T20:18:49.904256Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Step 4: Split Documents\nTo improve efficiency, we'll split the documents into smaller chunks:","metadata":{}},{"cell_type":"code","source":"text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)\nsplits = text_splitter.split_documents(data)","metadata":{"execution":{"iopub.status.busy":"2024-04-14T20:18:49.907832Z","iopub.execute_input":"2024-04-14T20:18:49.908161Z","iopub.status.idle":"2024-04-14T20:18:49.926155Z","shell.execute_reply.started":"2024-04-14T20:18:49.908133Z","shell.execute_reply":"2024-04-14T20:18:49.924731Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Step 5: Create Vector Database\nWe'll use SentenceTransformer to embed the text and create a vector database:","metadata":{}},{"cell_type":"code","source":"embedding = SentenceTransformerEmbeddings(model_name='all-MiniLM-L6-v2')\nvectordb = Chroma.from_documents(documents=splits, embedding=embedding)","metadata":{"execution":{"iopub.status.busy":"2024-04-14T20:18:49.927534Z","iopub.execute_input":"2024-04-14T20:18:49.927911Z","iopub.status.idle":"2024-04-14T20:19:07.156673Z","shell.execute_reply.started":"2024-04-14T20:18:49.927883Z","shell.execute_reply":"2024-04-14T20:19:07.155824Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Step 6: Create Retriever\nNow, we'll create a retriever using the vector database:","metadata":{}},{"cell_type":"code","source":"retriever = vectordb.as_retriever(search_type=\"similarity\", search_kwargs={\"k\": 2})","metadata":{"execution":{"iopub.status.busy":"2024-04-14T20:19:07.158208Z","iopub.execute_input":"2024-04-14T20:19:07.159362Z","iopub.status.idle":"2024-04-14T20:19:07.166374Z","shell.execute_reply.started":"2024-04-14T20:19:07.159317Z","shell.execute_reply":"2024-04-14T20:19:07.165239Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"creates a tool specifically designed to find relevant documents within your vector database. It is useful because:\n* **Faster Retrieval**: Instead of searching through raw text documents, the retriever searches through the more compact and efficient vector representations. This allows for much faster retrieval of similar documents.\n* **Similarity-Based Search**: The search_type=\"similarity\" argument specifies that the retriever should find documents with embeddings most similar to a given query embedding. This is ideal for tasks where you want to find documents that convey similar information or ideas.\n* **Top K Results**: The search_kwargs={\"k\": 2\"} argument tells the retriever to return only the top 2 most similar documents for a given query. This is useful for focusing on the most relevant results and avoiding overwhelming the user with too many options.","metadata":{}},{"cell_type":"markdown","source":"# Step 7: Load Language Model\nWe'll use a pre-trained language model from Hugging Face:","metadata":{}},{"cell_type":"code","source":"os.environ[\"HUGGINGFACEHUB_API_TOKEN\"] = UserSecretsClient().get_secret('API_TOKEN')\n\nrepo_id = \"google/gemma-1.1-2b-it\"\n\nllm = HuggingFaceEndpoint( repo_id=repo_id, max_length=1024, temperature=0.1)","metadata":{"execution":{"iopub.status.busy":"2024-04-14T20:29:09.221123Z","iopub.execute_input":"2024-04-14T20:29:09.221670Z","iopub.status.idle":"2024-04-14T20:29:09.604307Z","shell.execute_reply.started":"2024-04-14T20:29:09.221629Z","shell.execute_reply":"2024-04-14T20:29:09.603132Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Step 8: Create Conversational Retriever Chain\nCombine the retriever and language model into a conversational retriever chain:","metadata":{}},{"cell_type":"code","source":"qa = ConversationalRetrievalChain.from_llm(llm, retriever)","metadata":{"execution":{"iopub.status.busy":"2024-04-14T20:29:43.456235Z","iopub.execute_input":"2024-04-14T20:29:43.457342Z","iopub.status.idle":"2024-04-14T20:29:43.463276Z","shell.execute_reply.started":"2024-04-14T20:29:43.457289Z","shell.execute_reply":"2024-04-14T20:29:43.462172Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Step 9: Define Conversation Execution Function\nDefine a function to execute the conversation:","metadata":{}},{"cell_type":"code","source":"def execute_conversation(question):\n    chat_history = []\n    result = qa({\"question\": question, \"chat_history\": chat_history})\n    chat_history.append(result[\"answer\"])\n    return result[\"answer\"]","metadata":{"execution":{"iopub.status.busy":"2024-04-14T20:29:48.046760Z","iopub.execute_input":"2024-04-14T20:29:48.047233Z","iopub.status.idle":"2024-04-14T20:29:48.053566Z","shell.execute_reply.started":"2024-04-14T20:29:48.047199Z","shell.execute_reply":"2024-04-14T20:29:48.052118Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Step 10: Define Questions and Get Answers\nNow, you can define questions and get answers using the execute_conversation function. \n**It is better to choose questions from this page to make sure it works well:**\n\n ***https://www.datascienceglossary.org/***","metadata":{}},{"cell_type":"code","source":"question1=\"What is data science\"\nprint(execute_conversation(question1))","metadata":{"execution":{"iopub.status.busy":"2024-04-14T20:29:52.533423Z","iopub.execute_input":"2024-04-14T20:29:52.534172Z","iopub.status.idle":"2024-04-14T20:29:52.935708Z","shell.execute_reply.started":"2024-04-14T20:29:52.534130Z","shell.execute_reply":"2024-04-14T20:29:52.934236Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"question2=\"What is correlation?\"\nprint(execute_conversation(question2))","metadata":{"execution":{"iopub.status.busy":"2024-04-14T20:29:57.577313Z","iopub.execute_input":"2024-04-14T20:29:57.577793Z","iopub.status.idle":"2024-04-14T20:29:59.052542Z","shell.execute_reply.started":"2024-04-14T20:29:57.577754Z","shell.execute_reply":"2024-04-14T20:29:59.051020Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"question3=\"What is Mean Squared Error?\"\nprint(execute_conversation(question3))","metadata":{"execution":{"iopub.status.busy":"2024-04-14T20:30:03.087081Z","iopub.execute_input":"2024-04-14T20:30:03.087560Z","iopub.status.idle":"2024-04-14T20:30:04.172431Z","shell.execute_reply.started":"2024-04-14T20:30:03.087524Z","shell.execute_reply":"2024-04-14T20:30:04.170924Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Step 11: Create a Gradio Interface\nFinally, create a Gradio interface to interact with the model:  \n**Note : It is better to choose questions from this page to make sure it works well.** \n***https://www.datascienceglossary.org/***","metadata":{}},{"cell_type":"code","source":"# def chatbot(query):\n#   # Replace this with your actual function to execute the conversation\n#   # This placeholder just returns the query for demonstration purposes\n#   return query\n\ninterface = gr.Interface(\n  fn=execute_conversation,\n  inputs=\"text\",\n  outputs=\"text\",\n  title=\"Retrieval Augmented Generation (RAG) to explain basic data science concepts.\",\n  description=\"Enter your question\",\n  live=False,\n)\n\ninterface.launch()\n","metadata":{"execution":{"iopub.status.busy":"2024-04-14T20:30:07.771300Z","iopub.execute_input":"2024-04-14T20:30:07.771795Z","iopub.status.idle":"2024-04-14T20:30:13.359030Z","shell.execute_reply.started":"2024-04-14T20:30:07.771756Z","shell.execute_reply":"2024-04-14T20:30:13.358154Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}