Spaces:
Sleeping
Sleeping
import warnings | |
import streamlit as st | |
from dotenv import load_dotenv | |
from src.chat_rag_agent import ChatRagAgent | |
from src.utils import render_chat_history, get_render_assistant_message | |
warnings.filterwarnings("ignore") | |
load_dotenv() | |
st.set_page_config( | |
page_icon="images/logo2.png", | |
initial_sidebar_state="collapsed" | |
) | |
def get_chat_rag_agent(): | |
return ChatRagAgent() | |
def calc_progress_perc(): | |
return min(round(st.session_state["ctx_len"] / chat_rag_agent.n_ctx * 100), 100) | |
def pbar_callback(): | |
pbar.progress(calc_progress_perc(), "Chat history limit") | |
with st.spinner("Engine loading"): | |
chat_rag_agent = get_chat_rag_agent() | |
if "messages" not in st.session_state or st.sidebar.button("Clear chat history"): | |
st.session_state["input_blocked"] = False | |
st.session_state["messages"] = [] | |
st.session_state["ctx_len"] = 0 | |
st.title("Christian compass") | |
st.markdown("What theological questions you have?") | |
pbar = st.sidebar.progress(calc_progress_perc(), "Chat history limit") | |
user_message = st.chat_input(disabled=st.session_state["input_blocked"]) | |
if user_message: | |
if not st.session_state["input_blocked"]: | |
(message_generator, n_tokens), sources = chat_rag_agent.chat( | |
st.session_state["messages"], | |
user_message | |
) | |
st.session_state["ctx_len"] = n_tokens | |
st.session_state["messages"].append( | |
{ | |
"role": "user", | |
"content": user_message | |
} | |
) | |
render_chat_history() | |
if not st.session_state["input_blocked"]: | |
pbar_callback() | |
message = get_render_assistant_message(message_generator, sources, pbar_callback) | |
st.session_state["messages"].append( | |
{ | |
"role": "assistant", | |
"content": message | |
} | |
) | |
if st.session_state["ctx_len"] >= chat_rag_agent.n_ctx: | |
st.session_state["input_blocked"] = True | |
st.info("Chat history limit reached") | |