Spaces:
Runtime error
Runtime error
import streamlit as st | |
import os | |
from langchain.document_loaders.csv_loader import CSVLoader | |
from langchain.text_splitter import RecursiveCharacterTextSplitter | |
from langchain.embeddings import HuggingFaceEmbeddings | |
from langchain.vectorstores import FAISS | |
from langchain.llms import CTransformers | |
from langchain.chains import ConversationalRetrievalChain | |
def add_vertical_space(spaces=1): | |
for _ in range(spaces): | |
st.sidebar.markdown("---") | |
def main(): | |
st.set_page_config(page_title="Llama-2-GGML CSV Chatbot", layout="wide") | |
st.title("Llama-2-GGML CSV Chatbot") | |
st.sidebar.title("About") | |
st.sidebar.markdown(''' | |
The Llama-2-GGML CSV Chatbot uses the **Llama-2-7B-Chat-GGML** model. | |
### πBot evolving, stay tuned! | |
## Useful Links π | |
- **Model:** [Llama-2-7B-Chat-GGML](https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML/tree/main) π | |
- **GitHub:** [ThisIs-Developer/Llama-2-GGML-CSV-Chatbot](https://github.com/ThisIs-Developer/Llama-2-GGML-CSV-Chatbot) π¬ | |
''') | |
DB_FAISS_PATH = "vectorstore/db_faiss" | |
TEMP_DIR = "temp" | |
if not os.path.exists(TEMP_DIR): | |
os.makedirs(TEMP_DIR) | |
uploaded_file = st.sidebar.file_uploader("Upload CSV file", type=['csv'], help="Upload a CSV file") | |
add_vertical_space(1) | |
st.sidebar.markdown('Made by [@ThisIs-Developer](https://huggingface.co/ThisIs-Developer)') | |
if uploaded_file is not None: | |
file_path = os.path.join(TEMP_DIR, uploaded_file.name) | |
with open(file_path, "wb") as f: | |
f.write(uploaded_file.getvalue()) | |
st.write(f"Uploaded file: {uploaded_file.name}") | |
st.write("Processing CSV file...") | |
loader = CSVLoader(file_path=file_path, encoding="utf-8", csv_args={'delimiter': ','}) | |
data = loader.load() | |
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=20) | |
text_chunks = text_splitter.split_documents(data) | |
st.write(f"Total text chunks: {len(text_chunks)}") | |
embeddings = HuggingFaceEmbeddings(model_name='sentence-transformers/all-MiniLM-L6-v2') | |
docsearch = FAISS.from_documents(text_chunks, embeddings) | |
docsearch.save_local(DB_FAISS_PATH) | |
llm = CTransformers(model="models/llama-2-7b-chat.ggmlv3.q4_0.bin", | |
model_type="llama", | |
max_new_tokens=512, | |
temperature=0.1) | |
qa = ConversationalRetrievalChain.from_llm(llm, retriever=docsearch.as_retriever()) | |
st.write("### Enter your query:") | |
query = st.text_input("Input Prompt:") | |
if query: | |
with st.spinner("Processing your question..."): | |
chat_history = [] | |
result = qa({"question": query, "chat_history": chat_history}) | |
st.write("---") | |
st.write("### Response:") | |
st.write(f"> {result['answer']}") | |
os.remove(file_path) | |
if __name__ == "__main__": | |
main() | |