import streamlit as st import g4f import json import os import uuid # Custom CSS untuk tampilan premium st.markdown( """ """, unsafe_allow_html=True, ) # Fungsi database tetap sama... # Inisialisasi state # ... (tetap sama dengan sebelumnya) ... # Sidebar yang lebih modern with st.sidebar: st.markdown("## 💬 Chat Sessions") st.markdown("---") # Buat session baru with st.expander("➕ New Session", expanded=True): new_session_name = st.text_input("Session name", key="new_session") if st.button("Create", key="create_btn"): if new_session_name: if new_session_name not in st.session_state.sessions: st.session_state.sessions[new_session_name] = [] st.session_state.current_session = new_session_name database[user_id] = st.session_state.sessions save_database(database) st.rerun() else: st.error("Name already exists!") else: st.error("Please enter a name") st.markdown("---") st.markdown("### 📚 Your Sessions") # Daftar session sessions = list(st.session_state.sessions.keys()) for idx, session in enumerate(sessions): is_active = session == st.session_state.current_session session_class = "active-session" if is_active else "session-item" st.markdown( f'
{session}
', unsafe_allow_html=True ) # JavaScript untuk session selection st.markdown( """ """, unsafe_allow_html=True ) # Area chat utama st.markdown('
', unsafe_allow_html=True) st.markdown('
', unsafe_allow_html=True) if st.session_state.current_session: # Tampilkan chat history for message in st.session_state.sessions[st.session_state.current_session]: if message["role"] == "user": st.markdown( f'''
{message["content"]}
''', unsafe_allow_html=True ) else: st.markdown( f'''
{message["content"]}
''', unsafe_allow_html=True ) # Input area st.markdown('
', unsafe_allow_html=True) # Tutup chat container st.markdown('
', unsafe_allow_html=True) if prompt := st.chat_input("Message ChatGPT..."): # Tambahkan pesan user st.session_state.sessions[st.session_state.current_session].append({"role": "user", "content": prompt}) # Tampilkan loading loading_placeholder = st.empty() loading_placeholder.markdown( '
', unsafe_allow_html=True ) # Dapatkan respons try: response = g4f.ChatCompletion.create( model="blackboxai", messages=st.session_state.sessions[st.session_state.current_session], provider=g4f.Provider.Blackbox ) # Hapus loading dan tampilkan respons loading_placeholder.empty() st.session_state.sessions[st.session_state.current_session].append({"role": "assistant", "content": response}) database[user_id] = st.session_state.sessions save_database(database) st.rerun() except Exception as e: loading_placeholder.empty() st.markdown( f'''
⚠️
Error: {str(e)}
''', unsafe_allow_html=True ) st.markdown('
', unsafe_allow_html=True) # Tutup input container dan main else: st.markdown('', unsafe_allow_html=True) # Tutup chat container st.markdown('
', unsafe_allow_html=True) st.info("Please select or create a session from the sidebar") st.markdown('
', unsafe_allow_html=True) # Auto-scroll ke pesan terakhir st.markdown( """ """, unsafe_allow_html=True )