File size: 3,856 Bytes
62c16a7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ae86b65
62c16a7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ae86b65
 
62c16a7
 
 
 
 
 
 
 
 
 
 
ae86b65
62c16a7
 
ae86b65
62c16a7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ae86b65
0e4ec89
 
 
 
 
 
 
 
 
 
62c16a7
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import os
from dotenv import load_dotenv
from io import BytesIO
from io import StringIO
import sys
import re
from langchain.agents import create_csv_agent
from src.modules.history import ChatHistory
from src.modules.layout import Layout
from src.modules.utils import Utilities
from src.modules.sidebar import Sidebar
import streamlit as st
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationalRetrievalChain
from langchain.vectorstores import FAISS
from json2table import convert


# To be able to update the changes made to modules in localhost,
# you can press the "r" key on the localhost page to refresh and reflect the changes made to the module files.
def reload_module(module_name):
    import importlib
    import sys
    if module_name in sys.modules:
        importlib.reload(sys.modules[module_name])
    return sys.modules[module_name]


history_module = reload_module('src.modules.history')
layout_module = reload_module('src.modules.layout')
utils_module = reload_module('src.modules.utils')
sidebar_module = reload_module('src.modules.sidebar')

ChatHistory = history_module.ChatHistory
Layout = layout_module.Layout
Utilities = utils_module.Utilities
Sidebar = sidebar_module.Sidebar


def init():
    load_dotenv()
    st.set_page_config(layout="wide", page_icon="💬", page_title="ChatBot-Legger")


def main():
    init()
    layout, sidebar, utils = Layout(), Sidebar(), Utilities()
    sidebar.show_logo('assets/Images/colleen-logo.png')

    layout.show_header_txt()
    user_api_key = utils.load_api_key()

    if not user_api_key:
        layout.show_api_key_missing()
    else:
        os.environ["OPENAI_API_KEY"] = user_api_key
        # uploaded_file = utils.handle_upload_txt()
        uploaded_file = utils.handle_upload_ledger()

        if uploaded_file:
            history = ChatHistory()
            sidebar.show_options()

            uploaded_file_content = StringIO(uploaded_file.getvalue().decode("utf-8"))
            string_data = uploaded_file_content.read()

            # st.write(string_data)

            try:
                chatbot = utils.setup_chatbot_ledger(
                    uploaded_file, st.session_state["model"], st.session_state["temperature"]
                )
                # st.write(chatbot)
                st.session_state["chatbot"] = chatbot
                st.session_state['agent'] = chatbot

                if st.session_state["ready"]:
                    response_container, prompt_container = st.container(), st.container()

                    with prompt_container:
                        is_ready, user_input = layout.prompt_form()

                        history.initialize(uploaded_file)
                        if st.session_state["reset_chat"]:
                            history.reset(uploaded_file)

                        if is_ready:
                            history.append("user", user_input)
                            output = st.session_state["chatbot"].csv_agent(user_input)
                            # st.text(sys.stdout)
                            # st.text(StringIO.getvalue())
                            old_stdout = sys.stdout
                            sys.stdout = captured_output = StringIO()
                            sys.stdout = old_stdout
                            thoughts = captured_output.getvalue()
                            # st.text(old_stdout)
                            # st.text(captured_output)
                            st.text('thoughts: '+thoughts)

                            history.append("assistant", output)

                    history.generate_messages(response_container)

            except Exception as e:
                st.error(f"Error: {str(e)}")

    sidebar.about()


if __name__ == "__main__":
    main()