Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from chatbot import ( | |
| get_googlegenai_client, | |
| get_default_model, | |
| load_chat_history, | |
| save_chat_history | |
| ) | |
| st.markdown(""" | |
| <h1 style='text-align: center;'>Welcome, ChatGPT Clone</h1> | |
| """, unsafe_allow_html=True) | |
| client = get_googlegenai_client() | |
| if "googlegenai_model" not in st.session_state: | |
| st.session_state["googlegenai_model"] = get_default_model() | |
| if "messages" not in st.session_state: | |
| st.session_state.messages = load_chat_history() | |
| with st.sidebar: | |
| if st.button("Delete Chat History"): | |
| st.session_state.messages = [] | |
| save_chat_history([]) | |
| for msg in st.session_state.messages: | |
| role = msg["role"] | |
| content = msg["content"] | |
| if role == "user": | |
| st.markdown(f""" | |
| <div style='text-align: right; background-color: #f0f0f5; padding: 10px 15px; border-radius: 20px; margin: 10px 0; display: inline-block; max-width: 80%; float: right; clear: both;'> | |
| {content} | |
| </div> | |
| """, unsafe_allow_html=True) | |
| else: | |
| st.markdown(f""" | |
| <div style='text-align: left; margin: 10px 0; max-width: 80%; float: left; clear: both;'> | |
| {content} | |
| </div> | |
| """, unsafe_allow_html=True) | |
| st.markdown("<div style='clear: both'></div>", unsafe_allow_html=True) | |
| if prompt := st.chat_input("Ask anything"): | |
| st.session_state.messages.append({"role": "user", "content": prompt}) | |
| st.markdown(f""" | |
| <div style='text-align: right; background-color: #f0f0f5; padding: 10px 15px; border-radius: 20px; margin: 10px 0; display: inline-block; max-width: 80%; float: right; clear: both;'> | |
| {prompt} | |
| </div> | |
| """, unsafe_allow_html=True) | |
| full_response = "" | |
| response_container = st.empty() | |
| response = client.stream(st.session_state.messages) | |
| for chunk in response: | |
| full_response += chunk.content or "" | |
| response_container.markdown(f""" | |
| <div style='text-align: left; margin: 10px 0; max-width: 80%; float: left; clear: both;'> | |
| {full_response + "▌"} | |
| </div> | |
| """, unsafe_allow_html=True) | |
| response_container.markdown(f""" | |
| <div style='text-align: left; margin: 10px 0; max-width: 80%; float: left; clear: both;'> | |
| {full_response} | |
| </div> | |
| """, unsafe_allow_html=True) | |
| st.markdown("<div style='clear: both'></div>", unsafe_allow_html=True) | |
| st.session_state.messages.append({"role": "assistant", "content": full_response}) | |
| save_chat_history(st.session_state.messages) |