File size: 5,097 Bytes
7b0adee
b11da8b
44f0668
7b0adee
b11da8b
 
 
 
 
7b0adee
 
b11da8b
7b0adee
b11da8b
7b0adee
b11da8b
7b0adee
b11da8b
 
347c084
b11da8b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7b0adee
b11da8b
44f0668
7b0adee
 
44f0668
7b0adee
b11da8b
7b0adee
 
 
 
 
 
b11da8b
 
 
 
7b0adee
 
b11da8b
 
7b0adee
b11da8b
7b0adee
 
b11da8b
7b0adee
 
b11da8b
7b0adee
 
 
 
b11da8b
7b0adee
b11da8b
7b0adee
347c084
b11da8b
 
34955ee
b11da8b
34955ee
3a1ba74
b11da8b
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
import streamlit as st
from streamlit_chat import message
from langchain_openai import ChatOpenAI
from langchain.chains import ConversationChain
from langchain.chains.conversation.memory import (ConversationBufferMemory, 
                                                  ConversationSummaryMemory, 
                                                  ConversationBufferWindowMemory
               
                                                  )

if 'conversation' not in st.session_state:
    st.session_state['conversation'] =None
if 'messages' not in st.session_state:
    st.session_state['messages'] =[]
if 'API_Key' not in st.session_state:
    st.session_state['API_Key'] =''

# Setting page title and header
st.set_page_config(page_title="ChatMate: Your Professional AI Conversation Partner Solution", page_icon=":robot_face:")
st.markdown("<h1 style='text-align: center; color: navy;'>ChatMate</h1>", unsafe_allow_html=True)
st.markdown("<h4 style='text-align: center;'>A cutting-edge language model</h4>", unsafe_allow_html=True)
st.markdown("<p style='text-align: right'>By <a href='https://entzyeung.github.io/portfolio/index.html'>Lorentz Yeung</a></p>", unsafe_allow_html=True)

st.markdown("<p style='text-align: left;'>I am capable of recalling previous parts of our conversation, such as remembering your name if you share it with me.</p>", unsafe_allow_html=True)
st.session_state['API_Key']= st.text_input("First, to get it work, put your OpenAI API Key here please, the system will enter for you automatically.",type="password")
st.markdown("<p style='text-align: left;'>Then Tell me how I can help:</p>", unsafe_allow_html=True)



# API Keys
# st.sidebar.text_input() will automatically update st.session_state['API_Key'] with the input value whenever the user types into the field. 
st.sidebar.title("Introduction")
st.sidebar.markdown("""
ChatMate is an advanced conversational AI interface, expertly crafted to demonstrate the fusion of Streamlit's user-friendly design and OpenAI's powerful GPT-3.5 model. Here are its highlights:

<ul style='text-align: left;'>
<li><strong>Intuitive Interface</strong>: Built with Streamlit, ChatMate offers a clean, responsive user experience, allowing for natural dialogue with the AI.</li>
<li><strong>Advanced NLP</strong>: Incorporating OpenAI's most advanced GPT model, the app provides nuanced understanding and generation of human-like text, showcasing the model's impressive capabilities.</li>
<li><strong>State Management</strong>: Utilizes <code>ConversationChain</code> and <code>ConversationMemory</code> from <code>langchain</code> to preserve the context and flow, ensuring coherent and engaging interactions.</li>
<li><strong>Python Proficiency</strong>: The app's robust backend, written in Python, reflects the data scientist’s adeptness in programming and system design.</li>
<li><strong>Secure Interaction</strong>: Streamlit's session state management is used for secure API key handling and user input retention across sessions.</li>
</ul>

ChatMate is developed by Lorentz Yeung
""", unsafe_allow_html=True)

#st.session_state['API_Key']= st.sidebar.text_input("Put your OpenAI API Key here please, the system will enter for you automatically.",type="password")

# summarise_button = st.sidebar.button("Summarise the conversation", key="summarise")
#if summarise_button:
#    summarise_placeholder = st.sidebar.write("Nice chatting with you my friend ❤️")



# Function to get response from the model
def getresponse(userInput, api_key):

    if st.session_state['conversation'] is None:

        llm = ChatOpenAI(
            temperature=0,
            openai_api_key=api_key,
            model_name='gpt-3.5-turbo'
        )

        st.session_state['conversation'] = ConversationChain(
            llm=llm,
            verbose=True,
            memory=ConversationSummaryMemory(llm=llm)
        )

    response=st.session_state['conversation'].predict(input=userInput)
    print(st.session_state['conversation'].memory.buffer)
    

    return response



response_container = st.container()
# Here we will have a container for user input text box
container = st.container()

# User input and response display
with container:
    with st.form(key='my_form', clear_on_submit=True):
        user_input = st.text_area("Ask me questions please", key='input', height=100)
        submit_button = st.form_submit_button(label='Send')

        if submit_button:
            st.session_state['messages'].append(user_input)
            model_response=getresponse(user_input,st.session_state['API_Key'])
            st.session_state['messages'].append(model_response)
            

            with response_container:
                for i in range(len(st.session_state['messages'])):
                        if (i % 2) == 0:
                            message(st.session_state['messages'][i], is_user=True, key=str(i) + '_user', avatar_style="adventurer")
                        else:
                            message(st.session_state['messages'][i], key=str(i) + '_AI', avatar_style="bottts")