File size: 1,826 Bytes
ea1ba01
 
1c19c94
ea1ba01
542a0cb
daa81fb
 
 
 
 
542a0cb
1c19c94
daa81fb
 
 
 
 
 
 
 
 
ea1ba01
 
 
be1430e
daa81fb
 
be1430e
ea1ba01
 
daa81fb
 
 
 
ea1ba01
27232ee
6cc3b6e
3de8e98
27232ee
daa81fb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
886eee7
882e3b8
886eee7
daa81fb
ea1ba01
 
882e3b8
ea1ba01
886eee7
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
import streamlit as st
import os
from dotenv import load_dotenv
from langsmith import traceable

from app.chat import (
    initialize_session_state,
    display_chat_history,
)
from app.data_loader import get_data, load_docs
from app.document_processor import process_documents, save_vector_store_to_supabase, load_vector_store_from_supabase
from app.db import supabase
from app.config import Config
# Modularized helpers
import app.rag as rag
import app.vector_store as vs
import app.auth as auth
import app.ui as ui
from app.session import restore_user_session_if_needed, ensure_active_session
from app.workflows import prepare_vector_store_if_needed
from uuid import uuid4

load_dotenv()


BUCKET_NAME = Config.BUCKET_NAME
VECTOR_STORE_PREFIX = Config.VECTOR_STORE_PREFIX

@traceable(name="Main Chatbot RAG App")
def main():
    try:
        load_dotenv()
    except Exception:
        pass
    initialize_session_state()
    st.set_page_config(
        page_title="PNP-Bot", 
        page_icon="assets/favicon.ico",    
    )
    # Try restore Supabase session if user missing
    restore_user_session_if_needed()
    # Authentication gate
    user = st.session_state.get("user")
    if not user:
        auth.auth_view()
        return

    # Ensure we have an active chat session
    ensure_active_session(user["id"])

    # Sidebar: delegate completely to UI module
    with st.sidebar:
        ui.render_sidebar_sessions()

    # Vector store orchestration (delegated)
    vector_store = prepare_vector_store_if_needed(len(st.session_state["history"]))
    st.session_state["vector_store"] = vector_store

    if st.session_state["vector_store"] is not None:
        chain = rag.create_conversational_chain(st.session_state["vector_store"])
        display_chat_history(chain)


if __name__ == "__main__":
    main()