| import streamlit as st |
| from chroma.chatbot_retriever import ask |
| from chroma.chatbot_chroma_db import create_new_chat, delete_chat, load_chats_from_db |
|
|
| |
| if "chats" not in st.session_state: |
| loaded = load_chats_from_db() |
| if loaded: |
| st.session_state.chats = loaded |
| else: |
| initial_chat_id = create_new_chat() |
| st.session_state.chats = {"Chat 1": {"messages": [], "chat_id": initial_chat_id}} |
|
|
| if "active_chat" not in st.session_state: |
| st.session_state.active_chat = "Chat 1" |
|
|
|
|
| |
|
|
| |
|
|
|
|
| |
| with st.sidebar: |
| st.title("Bank Chatbot") |
| |
| if st.button("+ New Chat", use_container_width=True): |
| new_name = f"Chat {len(st.session_state.chats) + 1}" |
| new_chat_id = create_new_chat() |
| st.session_state.chats[new_name] = {"messages": [], "chat_id": new_chat_id} |
| st.session_state.active_chat = new_name |
| st.rerun() |
|
|
| st.divider() |
|
|
| |
| for chat_name in list(st.session_state.chats.keys()): |
| col1, col2 = st.columns([4, 1]) |
|
|
| with col1: |
| if st.button(chat_name, key=f"select_{chat_name}", use_container_width=True): |
| st.session_state.active_chat = chat_name |
| st.rerun() |
|
|
| with col2: |
| if st.button("🗑", key=f"delete_{chat_name}"): |
| delete_chat(st.session_state.chats[chat_name]["chat_id"]) |
|
|
| del st.session_state.chats[chat_name] |
|
|
| |
| if st.session_state.active_chat == chat_name: |
| remaining = list(st.session_state.chats.keys()) |
| if remaining: |
| st.session_state.active_chat = remaining[0] |
| else: |
| |
| new_chat_id = create_new_chat() |
|
|
| st.session_state.chats["Chat 1"] = { |
| "messages": [], |
| "chat_id": new_chat_id |
| } |
| st.session_state.active_chat = "Chat 1" |
|
|
| st.rerun() |
|
|
| st.header(st.session_state.active_chat) |
|
|
| active = st.session_state.active_chat |
| |
| |
| for msg in st.session_state.chats[active]["messages"]: |
| with st.chat_message(msg["role"]): |
| st.write(msg["content"]) |
|
|
| if prompt := st.chat_input("Ask me anything..."): |
| |
| |
|
|
| active = st.session_state.active_chat |
| chat_id = st.session_state.chats[active]["chat_id"] |
| |
| |
| st.session_state.chats[active]["messages"].append({"role": "user", "content": prompt}) |
| |
| |
| |
|
|
| |
| |
| with st.spinner("Thinking..."): |
| response = ask(prompt, chat_id = chat_id, chat_name=active) |
| |
|
|
| |
| st.session_state.chats[active]["messages"].append({"role": "assistant", "content": response}) |
| st.rerun() |
|
|