File size: 3,373 Bytes
35a8c57
 
 
6dff6d7
 
 
 
 
 
35a8c57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cde2e05
35a8c57
 
 
cde2e05
 
 
 
35a8c57
 
 
 
cde2e05
35a8c57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import requests

st.set_page_config(
        page_title="IOGPT",
        page_icon="🤖",
        menu_items={}  # This helps hide the menu
    )

# Hide Streamlit menu and footer
hide_menu_style = """
        <style>
        #MainMenu {visibility: hidden;}
        footer {visibility: hidden;}
        </style>
        """
st.markdown(hide_menu_style, unsafe_allow_html=True)

class VietnameseChatbot:
    def __init__(self):
        self.api_key = st.secrets["GROQ_API_KEY"]  # Store your API key in Huggingface Secrets
        self.api_url = "https://api.groq.com/openai/v1/chat/completions"
        self.headers = {
            "Content-Type": "application/json",
            "Authorization": f"Bearer {self.api_key}"
        }

    def get_response(self, user_query):
        try:
            # Add a system message to guide the model's response
            payload = {
                "model": "gemma2-9b-it",
                "messages": [
                    {
                        "role": "system", 
                        "content": "You are an assistant designed to have helpful, ethical, non-biased, and constructive conversations. Do not engage with political, sensitive, or inappropriate topics. If asked about such subjects, politely decline to discuss them and redirect the conversation to more positive, constructive topics."
                    },
                    {"role": "user", "content": user_query}
                ]
            }
            response = requests.post(
                self.api_url, headers=self.headers, json=payload
            )
            if response.status_code == 200:
                return response.json()['choices'][0]['message']['content']
            else:
                print(f"API Error: {response.status_code}")
                print(f"Response: {response.text}")
                return "Đã xảy ra lỗi khi kết nối với API. Xin vui lòng thử lại."
        except Exception as e:
            print(f"Response generation error: {e}")
            return "Đã xảy ra lỗi. Xin vui lòng thử lại."

@st.cache_resource
def initialize_chatbot():
    return VietnameseChatbot()

def main():
    st.title("🤖 Trợ Lý AI - IOGPT")
    st.caption("Trò chuyện với chúng mình nhé!")

    # Initialize chatbot using cached initialization
    chatbot = initialize_chatbot()
    
    # Chat history in session state
    if 'messages' not in st.session_state:
        st.session_state.messages = []
    
    # Display chat messages
    for message in st.session_state.messages:
        with st.chat_message(message["role"]):
            st.markdown(message["content"])
    
    # User input
    if prompt := st.chat_input("Hãy nói gì đó..."):
        # Add user message to chat history
        st.session_state.messages.append({"role": "user", "content": prompt})
        
        # Display user message
        with st.chat_message("user"):
            st.markdown(prompt)
        
        # Get chatbot response
        response = chatbot.get_response(prompt)
        
        # Display chatbot response
        with st.chat_message("assistant"):
            st.markdown(response)
        
        # Add assistant message to chat history
        st.session_state.messages.append({"role": "assistant", "content": response})

if __name__ == "__main__":
    main()