prawnikai / app.py
adowu's picture
Update app.py
ca8334f verified
raw
history blame
2.97 kB
import streamlit as st
import logging
from database import KodeksProcessor
from config import DATABASE_DIR
import os
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def initialize_session_state():
if 'chatbot' not in st.session_state:
st.session_state.chatbot = None
if 'messages' not in st.session_state:
st.session_state.messages = []
def main():
st.title("Asystent Prawny")
initialize_session_state()
# Inicjalizacja bazy danych (jeśli potrzebna)
if 'db_initialized' not in st.session_state:
with st.spinner("Inicjalizacja bazy danych..."):
processor = KodeksProcessor()
if not os.path.exists(DATABASE_DIR):
logger.info(f"Przetwarzanie plików w katalogu: data/kodeksy")
processor.process_all_files("data/kodeksy")
else:
logger.info(f"Baza danych już istnieje w {DATABASE_DIR}")
st.session_state.db_initialized = True
# Przycisk do czyszczenia historii
if st.sidebar.button("Wyczyść historię"):
st.session_state.messages = []
st.rerun()
# Wyświetlenie historii czatu
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Input użytkownika
if prompt := st.chat_input("Zadaj pytanie dotyczące prawa..."):
# Dodaj pytanie użytkownika do historii
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.markdown(prompt)
# Wyszukaj odpowiednie fragmenty w bazie
processor = KodeksProcessor()
relevant_chunks = processor.search(prompt)
# Wygeneruj odpowiedź
with st.chat_message("assistant"):
message_placeholder = st.empty()
full_response = "Oto co znalazłem w bazie danych:\n\n"
for doc, metadata in zip(relevant_chunks['documents'][0], relevant_chunks['metadatas'][0]):
full_response += f"**Artykuł {metadata['article']}**\n{doc}\n\n"
message_placeholder.markdown(full_response)
# Dodaj odpowiedź asystenta do historii
st.session_state.messages.append({"role": "assistant", "content": full_response})
# Sekcja debugowania
if st.sidebar.checkbox("Pokaż informacje debugowania"):
st.subheader("Informacje debugowania")
processor = KodeksProcessor()
doc_count = processor.collection.count()
st.write(f"Całkowita liczba dokumentów w bazie danych: {doc_count}")
if st.button("Przetwórz pliki ponownie"):
processor.process_all_files("data/kodeksy")
st.success("Przetwarzanie zakończone")
if st.button("Pokaż wszystkie dokumenty"):
processor.list_all_documents()
if __name__ == "__main__":
main()