streamlit/web_demo.py
2023-12-14 16:59:25 +08:00

106 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import streamlit as st
st.set_page_config(
page_title="灵创对话",
page_icon=":web-demo:",
layout="wide",
)
st.markdown(""" <link rel="stylesheet" type="text/css" href="https://git.wm-app.xyz/dev/streamlit/raw/branch/master/customize.css"> """,
unsafe_allow_html=True)
# 初始化历史记录和past key values
if "history" not in st.session_state:
st.session_state.history = []
if "past_key_values" not in st.session_state:
st.session_state.past_key_values = None
# 设置max_length、top_p和temperature
# max_length = st.sidebar.slider("max_length", 0, 32768, 8192, step=1)
# top_p = st.sidebar.slider("top_p", 0.0, 1.0, 0.8, step=0.01)
# temperature = st.sidebar.slider("temperature", 0.0, 1.0, 0.6, step=0.01)
# 清理会话历史
# buttonClean = st.sidebar.button("清理会话历史", key="clean")
# if buttonClean:
# st.session_state.history = []
# st.session_state.past_key_values = None
# st.rerun()
mainContainer = st.container()
if len(st.session_state.history) == 0:
emptyContent = st.markdown("""<div class="example">
<div class="chat-demo">
<div><img class="logo" src="https://chat.topaiart.cn/assets/logo-3-d4405d8e.png"/></div>
<div class="case-list">
<div class="case-col">
<div class="case-title">例子</div>
<div class="case-item">用简单的术语解释质量守恒定律</div>
<div class="case-item">对 10 岁生日有什么创意吗?</div>
<div class="case-item">
如何在 Javascript 中发出 HTTP 请求request in Javascript?
</div>
</div>
<div class="case-col">
<div class="case-title">能力</div>
<div class="case-item">能记住用户早些时候的对话</div>
<div class="case-item">允许用户提供后续更正</div>
<div class="case-item">会拒绝不当的请求</div>
</div>
<div class="case-col">
<div class="case-title">提醒</div>
<div class="case-item">少数可能会产生错误信息</div>
<div class="case-item">可能会产生不当的指令或有偏见的内容</div>
<div class="case-item">对 2021 年后的世界和事件的了解有限</div>
</div>
</div>
</div>
</div>""", unsafe_allow_html=True)
else:
# 渲染聊天历史记录
for i, message in enumerate(st.session_state.history):
if message["role"] == "user":
with mainContainer.chat_message(name="user", avatar="user"):
st.markdown(message["content"])
else:
with mainContainer.chat_message(name="assistant", avatar="assistant"):
st.markdown(message["content"])
# 输入框和输出框
with mainContainer.chat_message(name="user", avatar="user"):
input_placeholder = st.empty()
with mainContainer.chat_message(name="assistant", avatar="assistant"):
message_placeholder = st.empty()
# 获取用户输入
prompt_text = st.chat_input("请输入您的问题")
# 如果用户输入了内容,则生成回复
if prompt_text:
# 处理历史为空的情况
if len(st.session_state.history) == 0:
emptyContent.empty()
# 输入框和输出框
with mainContainer.chat_message(name="user", avatar="user"):
input_placeholder = st.empty()
with mainContainer.chat_message(name="assistant", avatar="assistant"):
message_placeholder = st.empty()
history = st.session_state.history
past_key_values = st.session_state.past_key_values
history.append({
'content': prompt_text, "role": 'user'
})
response = "您的问题:”" + prompt_text + "“,我暂时无法处理!请重新问一个问题吧!"
history.append({
'content': response, "role": 'system'
})
input_placeholder.markdown(prompt_text)
message_placeholder.markdown(response)
# 更新历史记录和past key values
st.session_state.history = history
st.session_state.past_key_values = past_key_values
# st.markdown("""
# <footer>
# <div>您的反馈将帮助我们改进<br/>我们的目标是让您和AI更自然、更安全地进行互动</div>
# </footer>
# """, unsafe_allow_html=True)