Spaces:
Running
Running
import pandas as pd | |
from os import environ | |
import datetime | |
import streamlit as st | |
from langchain.schema import HumanMessage, FunctionMessage | |
from helper import build_agents | |
from login import back_to_main | |
environ['OPENAI_API_BASE'] = st.secrets['OPENAI_API_BASE'] | |
def on_chat_submit(): | |
ret = st.session_state.agents[st.session_state.sel][st.session_state.ret_type]({"input": st.session_state.chat_input}) | |
print(ret) | |
def clear_history(): | |
st.session_state.agents[st.session_state.sel][st.session_state.ret_type].memory.clear() | |
def back_to_main(): | |
if "user_info" in st.session_state: | |
del st.session_state.user_info | |
if "user_name" in st.session_state: | |
del st.session_state.user_name | |
if "jump_query_ask" in st.session_state: | |
del st.session_state.jump_query_ask | |
def chat_page(): | |
st.session_state["agents"] = build_agents(f"{st.session_state.user_name}?default") | |
with st.sidebar: | |
st.radio("Retriever Type", ["Self-querying retriever", "Vector SQL"], key="ret_type") | |
st.selectbox("Knowledge Base", ["ArXiv Papers", "Wikipedia", "ArXiv + Wikipedia"], key="sel") | |
st.button("Clear Chat History", on_click=clear_history) | |
st.button("Logout", on_click=back_to_main) | |
for msg in st.session_state.agents[st.session_state.sel][st.session_state.ret_type].memory.chat_memory.messages: | |
speaker = "user" if isinstance(msg, HumanMessage) else "assistant" | |
if isinstance(msg, FunctionMessage): | |
with st.chat_message("Knowledge Base", avatar="π"): | |
print(type(msg.content)) | |
st.write(f"*{datetime.datetime.fromtimestamp(msg.additional_kwargs['timestamp']).isoformat()}*") | |
st.write("Retrieved from knowledge base:") | |
try: | |
st.dataframe(pd.DataFrame.from_records(map(dict, eval(msg.content)))) | |
except: | |
st.write(msg.content) | |
else: | |
if len(msg.content) > 0: | |
with st.chat_message(speaker): | |
print(type(msg), msg.dict()) | |
st.write(f"*{datetime.datetime.fromtimestamp(msg.additional_kwargs['timestamp']).isoformat()}*") | |
st.write(f"{msg.content}") | |
st.chat_input("Input Message", on_submit=on_chat_submit, key="chat_input") | |