CoolFace
Apppublic

ecepekaslan/csvanalyzer

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes
app.py141 linesDownload Raw Back to root
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