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() | |