ChatData / chat.py
Fangrui Liu
update chat memory schema
fab8405
raw
history blame
2.34 kB
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")