fix webui: keep chat session sequence when delete session, again
This commit is contained in:
parent
6359f5e883
commit
5df3de8dd0
45
webui.py
45
webui.py
|
|
@ -21,17 +21,20 @@ if __name__ == "__main__":
|
|||
)
|
||||
|
||||
if "chat_list" not in st.session_state:
|
||||
st.session_state["chat_list"] = {"对话1": {"need_rename": True}}
|
||||
st.session_state["chat_list"] = {"对话1": {"need_rename": True, "chat_no": 1}}
|
||||
if "cur_chat_name" not in st.session_state:
|
||||
st.session_state["cur_chat_name"] = list(st.session_state["chat_list"].keys())[0]
|
||||
if "need_chat_name" not in st.session_state:
|
||||
st.session_state["need_chat_name"] = True
|
||||
if "chat_count" not in st.session_state:
|
||||
st.session_state["chat_count"] = 1
|
||||
|
||||
chat_list = [{"name": k, "chat_no": v.get("chat_no", 0)} for k, v in st.session_state.chat_list.items()]
|
||||
pages = {i["name"]: {
|
||||
chat_list = [x["name"] for x in sorted(chat_list, key=lambda x: x["chat_no"])]
|
||||
pages1 = {i: {
|
||||
"icon": "chat",
|
||||
"func": dialogue_page,
|
||||
} for i in sorted(chat_list, key=lambda x: x["chat_no"])}
|
||||
} for i in chat_list}
|
||||
|
||||
pages2 = {
|
||||
"新建对话": {
|
||||
|
|
@ -47,41 +50,43 @@ if __name__ == "__main__":
|
|||
"func": knowledge_base_page,
|
||||
},
|
||||
}
|
||||
pages.update(pages2)
|
||||
|
||||
|
||||
def on_change(key):
|
||||
selection = st.session_state[key]
|
||||
st.write(f"Selection changed to {selection}")
|
||||
pages = {**pages1, **pages2}
|
||||
|
||||
with st.sidebar:
|
||||
options = chat_list + list(pages2)
|
||||
icons = ["chat"] * len(chat_list) + [x["icon"] for x in pages2.values()]
|
||||
|
||||
default_index = list(pages).index(st.session_state["cur_chat_name"])
|
||||
selected_page = option_menu(
|
||||
"langchain-chatglm",
|
||||
options=list(pages.keys()),
|
||||
icons=[i["icon"] for i in pages.values()],
|
||||
options=options,
|
||||
icons=icons,
|
||||
menu_icon="chat-quote",
|
||||
default_index=default_index,
|
||||
)
|
||||
|
||||
if selected_page == "新建对话":
|
||||
cur_chat_name = st.session_state["cur_chat_name"]
|
||||
cur_chat_name = st.session_state.get("cur_chat_name")
|
||||
if (not st.session_state.get("create_chat")
|
||||
and not st.session_state.get("renamde_chat")
|
||||
and not st.session_state.get("delete_chat")):
|
||||
chat_no = len(st.session_state.chat_list) + 1
|
||||
st.session_state.chat_count += 1
|
||||
chat_no = st.session_state.chat_count
|
||||
new_chat_name = f"对话{chat_no}"
|
||||
st.session_state.chat_list[new_chat_name] = {"need_rename": True, "chat_no": chat_no}
|
||||
st.session_state["cur_chat_name"] = new_chat_name
|
||||
st.experimental_rerun()
|
||||
if st.session_state.get("create_chat"):
|
||||
st.session_state.create_chat = False
|
||||
if st.session_state.get("renamde_chat"):
|
||||
st.session_state.renamde_chat = False
|
||||
if st.session_state.get("delete_chat"):
|
||||
st.session_state.delete_chat = False
|
||||
else:
|
||||
if st.session_state.get("create_chat"):
|
||||
st.session_state.create_chat = False
|
||||
if st.session_state.get("renamde_chat"):
|
||||
st.session_state.renamde_chat = False
|
||||
st.experimental_rerun()
|
||||
if st.session_state.get("delete_chat"):
|
||||
st.session_state.delete_chat = False
|
||||
st.experimental_rerun()
|
||||
elif selected_page in st.session_state.chat_list:
|
||||
st.session_state["cur_chat_name"] = selected_page
|
||||
st.session_state["selected_page"] = selected_page
|
||||
|
||||
if selected_page in pages:
|
||||
pages[selected_page]["func"](api)
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ def get_messages_history(history_len: int) -> List[Dict]:
|
|||
|
||||
def dialogue_page(api: ApiRequest):
|
||||
chat_box.init_session()
|
||||
chat_box.use_chat_name(st.session_state.cur_chat_name)
|
||||
chat_box.use_chat_name(st.session_state.selected_page)
|
||||
|
||||
with st.sidebar:
|
||||
# TODO: 对话模型与会话绑定
|
||||
|
|
@ -82,7 +82,7 @@ def dialogue_page(api: ApiRequest):
|
|||
|
||||
chat_box.output_messages()
|
||||
|
||||
if st.session_state.chat_list.get(st.session_state.cur_chat_name, {}).get("need_rename"):
|
||||
if st.session_state.chat_list.get(st.session_state.selected_page, {}).get("need_rename"):
|
||||
chat_input_placeholder = "请输入对话名称"
|
||||
else:
|
||||
chat_input_placeholder = "请输入对话内容,换行请使用Ctrl+Enter "
|
||||
|
|
@ -91,15 +91,18 @@ def dialogue_page(api: ApiRequest):
|
|||
st.session_state.rename_chat = True
|
||||
|
||||
if prompt := st.chat_input(chat_input_placeholder, key="prompt", on_submit=on_prompt):
|
||||
if st.session_state.chat_list.get(st.session_state.cur_chat_name, {}).get("need_rename"):
|
||||
if st.session_state.chat_list.get(st.session_state.selected_page, {}).get("need_rename"):
|
||||
if prompt in st.session_state.chat_list.keys():
|
||||
st.toast("已有同名对话,请重新命名")
|
||||
else:
|
||||
st.session_state.chat_list[prompt] = {"need_rename": False}
|
||||
st.session_state.chat_list.pop(st.session_state.cur_chat_name)
|
||||
chat_box.del_chat_name(st.session_state.cur_chat_name)
|
||||
cur_chat_name = st.session_state.get("selected_page")
|
||||
st.session_state.chat_list[prompt] = {
|
||||
"need_rename": False,
|
||||
"chat_no": st.session_state.chat_list[cur_chat_name]["chat_no"]}
|
||||
st.session_state.chat_list.pop(cur_chat_name)
|
||||
chat_box.del_chat_name(cur_chat_name)
|
||||
st.session_state.cur_chat_name = prompt
|
||||
chat_box.use_chat_name(st.session_state.cur_chat_name)
|
||||
chat_box.use_chat_name(prompt)
|
||||
st.experimental_rerun()
|
||||
else:
|
||||
history = get_messages_history(history_len)
|
||||
|
|
@ -157,16 +160,17 @@ def dialogue_page(api: ApiRequest):
|
|||
use_container_width=True,
|
||||
on_click=on_delete_chat
|
||||
):
|
||||
chat_box.del_chat_name(st.session_state.cur_chat_name)
|
||||
st.session_state.chat_list.pop(st.session_state.cur_chat_name)
|
||||
cur_chat_name = st.session_state.get("selected_page")
|
||||
chat_box.del_chat_name(cur_chat_name)
|
||||
st.session_state.chat_list.pop(cur_chat_name)
|
||||
st.session_state.cur_chat_name = list(st.session_state.chat_list.keys())[0]
|
||||
chat_box.use_chat_name(st.session_state.cur_chat_name)
|
||||
st.experimental_rerun()
|
||||
|
||||
export_btn.download_button(
|
||||
"导出记录",
|
||||
"".join(chat_box.export2md(st.session_state.cur_chat_name)),
|
||||
file_name=f"{now:%Y-%m-%d %H.%M}_{st.session_state.cur_chat_name}.md",
|
||||
"".join(chat_box.export2md(st.session_state.selected_page)),
|
||||
file_name=f"{now:%Y-%m-%d %H.%M}_{st.session_state.selected_page}.md",
|
||||
mime="text/markdown",
|
||||
use_container_width=True,
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in New Issue