修正
This commit is contained in:
parent
758785e57b
commit
35771a9a60
BIN
__pycache__/app.cpython-312.pyc
Normal file
BIN
__pycache__/app.cpython-312.pyc
Normal file
Binary file not shown.
87
app.py
87
app.py
@ -4,6 +4,7 @@ Multi-Agent Decision Workshop - 主应用
|
||||
"""
|
||||
import streamlit as st
|
||||
import os
|
||||
import base64
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# 加载环境变量
|
||||
@ -197,6 +198,23 @@ with st.sidebar:
|
||||
on_change=save_current_config
|
||||
)
|
||||
|
||||
# 页面背景图片(全局)
|
||||
bg_file = st.file_uploader("页面背景图片(可选)", type=['png', 'jpg', 'jpeg', 'gif'], key='page_bg_uploader')
|
||||
if bg_file:
|
||||
# 保存到 assets 并在 session_state 中保存 data url 用于注入样式
|
||||
saved_path = st.session_state.storage.save_asset(bg_file)
|
||||
st.session_state.bg_image_path = saved_path
|
||||
try:
|
||||
buf = bg_file.getbuffer()
|
||||
except Exception:
|
||||
buf = bg_file.read()
|
||||
# detect mime
|
||||
ext = (bg_file.name.split('.')[-1].lower() if hasattr(bg_file, 'name') and bg_file.name else 'png')
|
||||
mime = 'image/png' if ext == 'png' else ('image/gif' if ext == 'gif' else 'image/jpeg')
|
||||
data_url = f"data:{mime};base64,{base64.b64encode(buf).decode()}"
|
||||
st.session_state.bg_image_data_url = data_url
|
||||
st.success("页面背景已上传并保存")
|
||||
|
||||
st.divider()
|
||||
|
||||
# 模式选择
|
||||
@ -275,9 +293,23 @@ with st.sidebar:
|
||||
del st.session_state.custom_agents[agent_id]
|
||||
st.rerun()
|
||||
|
||||
# 注入全局页面背景样式(如果已上传)
|
||||
if st.session_state.get("bg_image_data_url"):
|
||||
st.markdown(
|
||||
f"""<style>
|
||||
.stApp {{
|
||||
background-image: url('{st.session_state.get('bg_image_data_url')}');
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
background-attachment: fixed;
|
||||
}}
|
||||
</style>""",
|
||||
unsafe_allow_html=True
|
||||
)
|
||||
|
||||
# ==================== 主界面逻辑 ====================
|
||||
|
||||
if mode == "Deep Research":
|
||||
if st.session_state.mode == "Deep Research":
|
||||
st.title("🧪 Multi-Model Council V4")
|
||||
st.markdown("*多模型智囊团:自定义 N 个专家进行多轮对话讨论,最后由最后一位专家决策*")
|
||||
|
||||
@ -312,7 +344,6 @@ if mode == "Deep Research":
|
||||
})
|
||||
|
||||
research_context = st.text_area("补充背景 (可选)", placeholder="任何额外的背景信息...", height=80)
|
||||
research_image = st.file_uploader("上传背景图片(可选)", type=['png', 'jpg', 'jpeg', 'gif'], key='research_bg')
|
||||
|
||||
start_research_btn = st.button("🚀 开始多模型协作", type="primary", disabled=not research_topic)
|
||||
|
||||
@ -320,16 +351,14 @@ if mode == "Deep Research":
|
||||
st.session_state.research_started = True
|
||||
st.session_state.research_output = ""
|
||||
st.session_state.research_steps_output = []
|
||||
# 如果上传了背景图片,保存到 assets
|
||||
research_bg_path = None
|
||||
if research_image:
|
||||
research_bg_path = st.session_state.storage.save_asset(research_image)
|
||||
if research_bg_path:
|
||||
st.success("背景图片已上传并保存")
|
||||
try:
|
||||
st.image(research_image, caption="已上传背景图片预览", use_column_width=True)
|
||||
except Exception:
|
||||
pass
|
||||
# 使用全局页面背景(若已上传)
|
||||
research_bg_path = st.session_state.get("bg_image_path")
|
||||
if st.session_state.get("bg_image_data_url"):
|
||||
try:
|
||||
st.markdown("**页面背景预览**")
|
||||
st.image(st.session_state.get("bg_image_data_url"), use_column_width=True)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
manager = ResearchManager(
|
||||
api_key=api_key,
|
||||
@ -418,7 +447,7 @@ if mode == "Deep Research":
|
||||
st.divider()
|
||||
|
||||
|
||||
elif mode == "Debate Workshop":
|
||||
elif st.session_state.mode == "Debate Workshop":
|
||||
# ==================== 原始 Debate UI 逻辑 ====================
|
||||
st.title("🎭 多 Agent 决策工作坊")
|
||||
st.markdown("*让多个 AI 角色从不同视角辩论,帮助你做出更全面的决策*")
|
||||
@ -451,7 +480,7 @@ elif mode == "Debate Workshop":
|
||||
placeholder="提供更多上下文信息,如:\n- 当前状况\n- 已有的资源和限制\n- 相关数据和事实",
|
||||
height=100
|
||||
)
|
||||
context_image = st.file_uploader("上传背景图片(可选)", type=['png', 'jpg', 'jpeg', 'gif'], key='debate_bg')
|
||||
# 页面背景请使用侧边栏的“页面背景图片”上传控件进行设置(全局)
|
||||
context = context if 'context' in dir() else ""
|
||||
|
||||
with col2:
|
||||
@ -570,20 +599,14 @@ elif mode == "Debate Workshop":
|
||||
model=ag_model
|
||||
)
|
||||
|
||||
# 如果在界面上传了背景图片,自动保存到 assets
|
||||
debate_bg_path = None
|
||||
try:
|
||||
if 'context_image' in locals() and context_image:
|
||||
debate_bg_path = st.session_state.storage.save_asset(context_image)
|
||||
if debate_bg_path:
|
||||
st.success("背景图片已上传并保存")
|
||||
try:
|
||||
st.image(context_image, caption="已上传背景图片预览", use_column_width=True)
|
||||
except Exception:
|
||||
pass
|
||||
except Exception:
|
||||
# ignore upload errors but continue
|
||||
debate_bg_path = None
|
||||
# 使用全局页面背景(若已上传)
|
||||
debate_bg_path = st.session_state.get("bg_image_path")
|
||||
if st.session_state.get("bg_image_data_url"):
|
||||
try:
|
||||
st.markdown("**页面背景预览**")
|
||||
st.image(st.session_state.get("bg_image_data_url"), use_column_width=True)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
debate_manager = DebateManager(llm_client)
|
||||
|
||||
@ -628,11 +651,7 @@ elif mode == "Debate Workshop":
|
||||
"round": current_round
|
||||
})
|
||||
st.divider()
|
||||
|
||||
elif event["type"] == "debate_end":
|
||||
st.session_state.debate_finished = True
|
||||
st.success("✅ 辩论结束!正在生成决策报告...")
|
||||
|
||||
|
||||
# 生成报告
|
||||
if st.session_state.debate_finished:
|
||||
report_generator = ReportGenerator(llm_client)
|
||||
@ -661,7 +680,7 @@ elif mode == "Debate Workshop":
|
||||
"rounds": max_rounds,
|
||||
"agents": selected_agents,
|
||||
"language": output_language,
|
||||
**({"background_image": debate_bg_path} if debate_bg_path else {})
|
||||
**({"background_image": st.session_state.get("bg_image_path")} if st.session_state.get("bg_image_path") else {})
|
||||
}
|
||||
)
|
||||
st.toast("✅ 记录已保存到历史档案")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user