ecepekaslan/csvanalyzer
0
1import streamlit as st2from streamlit_chat import message3import os, tempfile, sys4from io import BytesIO5from io import StringIO6import pandas as pd7from langchain.agents import create_pandas_dataframe_agent8from langchain.llms.openai import OpenAI9from langchain.embeddings.openai import OpenAIEmbeddings10from langchain.chains.summarize import load_summarize_chain11from langchain.document_loaders.csv_loader import CSVLoader12from langchain.text_splitter import RecursiveCharacterTextSplitter13from langchain.text_splitter import CharacterTextSplitter14from langchain.chains.mapreduce import MapReduceChain15from langchain.docstore.document import Document16from langchain.vectorstores import FAISS17from langchain.chat_models import ChatOpenAI18from langchain.chains import ConversationalRetrievalChain19from langchain.chains import RetrievalQA20from langchain.memory import ConversationBufferMemory21from langchain.chains.conversational_retrieval.prompts import CONDENSE_QUESTION_PROMPT22from langchain.chains.question_answering import load_qa_chain23from langchain.prompts.prompt import PromptTemplate24from langchain import LLMChain25 26 27st.set_page_config(page_title="CSV Analyzer AI", layout="wide")28 29def chat(temperature, model_name):30 st.write("# Talk to CSV")31 # Add functionality for Page 132 reset = st.sidebar.button("Reset Chat")33 uploaded_file = st.sidebar.file_uploader("Upload your CSV here ๐:", type="csv")34 35 if uploaded_file :36 with tempfile.NamedTemporaryFile(delete=False) as tmp_file:37 tmp_file.write(uploaded_file.getvalue())38 tmp_file_path = tmp_file.name39 40 loader = CSVLoader(file_path=tmp_file_path, encoding="utf-8")41 data = loader.load()42 43 embeddings = OpenAIEmbeddings()44 vectors = FAISS.from_documents(data, embeddings)45 46 chain = ConversationalRetrievalChain.from_llm(llm = ChatOpenAI(temperature=0.0,model_name='gpt-3.5-turbo', openai_api_key=user_api_key),47 retriever=vectors.as_retriever())48 49 def conversational_chat(query):50 51 result = chain({"question": query, "chat_history": st.session_state['history']})52 st.session_state['history'].append((query, result["answer"]))53 54 return result["answer"]55 56 if 'history' not in st.session_state:57 st.session_state['history'] = []58 59 if 'generated' not in st.session_state:60 st.session_state['generated'] = ["Hello ! Ask me anything about " + uploaded_file.name + " ๐ค"]61 62 if 'past' not in st.session_state:63 st.session_state['past'] = ["Hey ! ๐"]64 65 #container for the chat history66 response_container = st.container()67 #container for the user's text input68 container = st.container()69 70 with container:71 with st.form(key='my_form', clear_on_submit=True):72 73 user_input = st.text_input("Query:", placeholder="Talk about your csv data here (:", key='input')74 submit_button = st.form_submit_button(label='Send')75 76 if submit_button and user_input:77 output = conversational_chat(user_input)78 79 st.session_state['past'].append(user_input)80 st.session_state['generated'].append(output)81 82 if st.session_state['generated']:83 with response_container:84 for i in range(len(st.session_state['generated'])):85 message(st.session_state["past"][i], is_user=True, key=str(i) + '_user', avatar_style="big-smile")86 message(st.session_state["generated"][i], key=str(i), avatar_style="thumbs")87 88# Main App89st.markdown(90 """91 <div style='text-align: center;'>92 <h1>CSV Analyzer AI</h1>93 </div>94 """,95 unsafe_allow_html=True,96)97st.markdown(98 """99 <div style='text-align: center;'>100 <h4>โก๏ธ Analyzing CSV Files</h4>101 </div>102 """,103 unsafe_allow_html=True,104)105 106 107if os.path.exists(".env") and os.environ.get("OPENAI_API_KEY") is not None:108 user_api_key = os.environ["OPENAI_API_KEY"]109 st.success("API key loaded from .env", icon="๐")110else:111 user_api_key = st.sidebar.text_input(112 label="#### Enter OpenAI API key ๐", placeholder="Paste your openAI API key, sk-", type="password", key="openai_api_key"113 )114 if user_api_key:115 st.sidebar.success("API key loaded", icon="๐")116 117os.environ["OPENAI_API_KEY"] = user_api_key118 119 120 121# Execute the home page function122MODEL_OPTIONS = ["gpt-3.5-turbo", "gpt-4", "gpt-4-32k"]123max_tokens = {"gpt-4":7000, "gpt-4-32k":31000, "gpt-3.5-turbo":3000}124TEMPERATURE_MIN_VALUE = 0.0125TEMPERATURE_MAX_VALUE = 1.0126TEMPERATURE_DEFAULT_VALUE = 0.9127TEMPERATURE_STEP = 0.01128model_name = st.sidebar.selectbox(label="Model", options=MODEL_OPTIONS)129top_p = st.sidebar.slider("Top_P", 0.0, 1.0, 1.0, 0.1)130freq_penalty = st.sidebar.slider("Frequency Penalty", 0.0, 2.0, 0.0, 0.1)131temperature = st.sidebar.slider(132 label="Temperature",133 min_value=TEMPERATURE_MIN_VALUE,134 max_value=TEMPERATURE_MAX_VALUE,135 value=TEMPERATURE_DEFAULT_VALUE,136 step=TEMPERATURE_STEP,)137 138 139 140chat(temperature=temperature, model_name=model_name)141 