demo updated to llama 3.1
This commit is contained in:
parent
d1a1215194
commit
9d0eae2d6c
3 changed files with 88 additions and 0 deletions
34
llama3.1_local_rag/README.md
Normal file
34
llama3.1_local_rag/README.md
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
## 💻 Local Lllama-3.1 with RAG
|
||||
Streamlit app that allows you to chat with any webpage using local Llama-3.1 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.1 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. Run the Streamlit App
|
||||
```bash
|
||||
streamlit run llama3.1_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.1 model is called to generate an answer using the retrieved context.
|
||||
- The app displays the answer to the user's question.
|
||||
|
||||
50
llama3.1_local_rag/llama3.1_local_rag.py
Normal file
50
llama3.1_local_rag/llama3.1_local_rag.py
Normal file
|
|
@ -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.1")
|
||||
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.1', 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)
|
||||
4
llama3.1_local_rag/requirements.txt
Normal file
4
llama3.1_local_rag/requirements.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
streamlit
|
||||
ollama
|
||||
langchain
|
||||
langchain_community
|
||||
Loading…
Reference in a new issue