diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..d5da7f7 Binary files /dev/null and b/.DS_Store differ diff --git a/README.md b/README.md index d9cb6ab..ee058db 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,9 @@ A curated collection of awesome LLM apps using RAG with OpenAI, Anthropic, Gemin ## 📂 Projects +## 💻 Local Lllama-3 with RAG +Streamlit app that allows you to chat with any webpage using local Llama-3 and Retrieval Augmented Generation (RAG). This app runs entirely on your computer, making it 100% free and without the need for an internet connection. + ### 📨 Chat with Gmail Interact with your Gmail inbox using natural language. Get accurate answers to your questions based on the content of your emails with Retrieval Augmented Generation (RAG). diff --git a/chat_with_pdf/.DS_Store b/chat_with_pdf/.DS_Store new file mode 100644 index 0000000..89fbf5f Binary files /dev/null and b/chat_with_pdf/.DS_Store differ diff --git a/llama3_local_rag/README.md b/llama3_local_rag/README.md new file mode 100644 index 0000000..e220149 --- /dev/null +++ b/llama3_local_rag/README.md @@ -0,0 +1,38 @@ +## 💻 Local Lllama-3 with RAG +Streamlit app that allows you to chat with any webpage using local Llama-3 and Retrieval Augmented Generation (RAG). This app runs entirely on your computer, making it 100% free and without the need for an internet connection. + + +### Features +- Input a webpage URL +- Ask questions about the content of the webpage +- Get accurate answers using RAG and the Llama-3 model running locally on your computer + +### How to get Started? + +1. Clone the GitHub repository + +```bash +git clone https://github.com/Shubhamsaboo/awesome-llm-apps.git +``` +2. Install the required dependencies: + +```bash +pip install -r requirements.txt +``` +3. Get your OpenAI API Key + +- Sign up for an [OpenAI account](https://platform.openai.com/) (or the LLM provider of your choice) and obtain your API key. + +4. Run the Streamlit App +```bash +streamlit run llama3_local_rag.py +``` + +### How it Works? + +- The app loads the webpage data using WebBaseLoader and splits it into chunks using RecursiveCharacterTextSplitter. +- It creates Ollama embeddings and a vector store using Chroma. +- The app sets up a RAG (Retrieval-Augmented Generation) chain, which retrieves relevant documents based on the user's question. +- The Llama-3 model is called to generate an answer using the retrieved context. +- The app displays the answer to the user's question. + diff --git a/llama3_local_rag/llama3_local_rag.py b/llama3_local_rag/llama3_local_rag.py new file mode 100644 index 0000000..6ae0e64 --- /dev/null +++ b/llama3_local_rag/llama3_local_rag.py @@ -0,0 +1,50 @@ +import streamlit as st +import ollama +from langchain.text_splitter import RecursiveCharacterTextSplitter +from langchain_community.document_loaders import WebBaseLoader +from langchain_community.vectorstores import Chroma +from langchain_community.embeddings import OllamaEmbeddings + +st.title("Chat with Webpage 🌐") +st.caption("This app allows you to chat with a webpage using local llama3 and RAG") + +# Get the webpage URL from the user +webpage_url = st.text_input("Enter Webpage URL", type="default") + +if webpage_url: + # 1. Load the data + loader = WebBaseLoader(webpage_url) + docs = loader.load() + text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=10) + splits = text_splitter.split_documents(docs) + + # 2. Create Ollama embeddings and vector store + embeddings = OllamaEmbeddings(model="llama3") + vectorstore = Chroma.from_documents(documents=splits, embedding=embeddings) + + # 3. Call Ollama Llama3 model + def ollama_llm(question, context): + formatted_prompt = f"Question: {question}\n\nContext: {context}" + response = ollama.chat(model='llama3', messages=[{'role': 'user', 'content': formatted_prompt}]) + return response['message']['content'] + + # 4. RAG Setup + retriever = vectorstore.as_retriever() + + def combine_docs(docs): + return "\n\n".join(doc.page_content for doc in docs) + + def rag_chain(question): + retrieved_docs = retriever.invoke(question) + formatted_context = combine_docs(retrieved_docs) + return ollama_llm(question, formatted_context) + + st.success(f"Loaded {webpage_url} successfully!") + + # Ask a question about the webpage + prompt = st.text_input("Ask any question about the webpage") + + # Chat with the webpage + if prompt: + result = rag_chain(prompt) + st.write(result) \ No newline at end of file diff --git a/llama3_local_rag/requirements.txt b/llama3_local_rag/requirements.txt new file mode 100644 index 0000000..2824430 --- /dev/null +++ b/llama3_local_rag/requirements.txt @@ -0,0 +1,4 @@ +streamlit +ollama +langchain +langchain_community \ No newline at end of file