修正
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 streamlit as st
|
||||||
import os
|
import os
|
||||||
|
import base64
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
# 加载环境变量
|
# 加载环境变量
|
||||||
@ -197,6 +198,23 @@ with st.sidebar:
|
|||||||
on_change=save_current_config
|
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()
|
st.divider()
|
||||||
|
|
||||||
# 模式选择
|
# 模式选择
|
||||||
@ -275,9 +293,23 @@ with st.sidebar:
|
|||||||
del st.session_state.custom_agents[agent_id]
|
del st.session_state.custom_agents[agent_id]
|
||||||
st.rerun()
|
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.title("🧪 Multi-Model Council V4")
|
||||||
st.markdown("*多模型智囊团:自定义 N 个专家进行多轮对话讨论,最后由最后一位专家决策*")
|
st.markdown("*多模型智囊团:自定义 N 个专家进行多轮对话讨论,最后由最后一位专家决策*")
|
||||||
|
|
||||||
@ -312,7 +344,6 @@ if mode == "Deep Research":
|
|||||||
})
|
})
|
||||||
|
|
||||||
research_context = st.text_area("补充背景 (可选)", placeholder="任何额外的背景信息...", height=80)
|
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)
|
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_started = True
|
||||||
st.session_state.research_output = ""
|
st.session_state.research_output = ""
|
||||||
st.session_state.research_steps_output = []
|
st.session_state.research_steps_output = []
|
||||||
# 如果上传了背景图片,保存到 assets
|
# 使用全局页面背景(若已上传)
|
||||||
research_bg_path = None
|
research_bg_path = st.session_state.get("bg_image_path")
|
||||||
if research_image:
|
if st.session_state.get("bg_image_data_url"):
|
||||||
research_bg_path = st.session_state.storage.save_asset(research_image)
|
try:
|
||||||
if research_bg_path:
|
st.markdown("**页面背景预览**")
|
||||||
st.success("背景图片已上传并保存")
|
st.image(st.session_state.get("bg_image_data_url"), use_column_width=True)
|
||||||
try:
|
except Exception:
|
||||||
st.image(research_image, caption="已上传背景图片预览", use_column_width=True)
|
pass
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
manager = ResearchManager(
|
manager = ResearchManager(
|
||||||
api_key=api_key,
|
api_key=api_key,
|
||||||
@ -418,7 +447,7 @@ if mode == "Deep Research":
|
|||||||
st.divider()
|
st.divider()
|
||||||
|
|
||||||
|
|
||||||
elif mode == "Debate Workshop":
|
elif st.session_state.mode == "Debate Workshop":
|
||||||
# ==================== 原始 Debate UI 逻辑 ====================
|
# ==================== 原始 Debate UI 逻辑 ====================
|
||||||
st.title("🎭 多 Agent 决策工作坊")
|
st.title("🎭 多 Agent 决策工作坊")
|
||||||
st.markdown("*让多个 AI 角色从不同视角辩论,帮助你做出更全面的决策*")
|
st.markdown("*让多个 AI 角色从不同视角辩论,帮助你做出更全面的决策*")
|
||||||
@ -451,7 +480,7 @@ elif mode == "Debate Workshop":
|
|||||||
placeholder="提供更多上下文信息,如:\n- 当前状况\n- 已有的资源和限制\n- 相关数据和事实",
|
placeholder="提供更多上下文信息,如:\n- 当前状况\n- 已有的资源和限制\n- 相关数据和事实",
|
||||||
height=100
|
height=100
|
||||||
)
|
)
|
||||||
context_image = st.file_uploader("上传背景图片(可选)", type=['png', 'jpg', 'jpeg', 'gif'], key='debate_bg')
|
# 页面背景请使用侧边栏的“页面背景图片”上传控件进行设置(全局)
|
||||||
context = context if 'context' in dir() else ""
|
context = context if 'context' in dir() else ""
|
||||||
|
|
||||||
with col2:
|
with col2:
|
||||||
@ -570,20 +599,14 @@ elif mode == "Debate Workshop":
|
|||||||
model=ag_model
|
model=ag_model
|
||||||
)
|
)
|
||||||
|
|
||||||
# 如果在界面上传了背景图片,自动保存到 assets
|
# 使用全局页面背景(若已上传)
|
||||||
debate_bg_path = None
|
debate_bg_path = st.session_state.get("bg_image_path")
|
||||||
try:
|
if st.session_state.get("bg_image_data_url"):
|
||||||
if 'context_image' in locals() and context_image:
|
try:
|
||||||
debate_bg_path = st.session_state.storage.save_asset(context_image)
|
st.markdown("**页面背景预览**")
|
||||||
if debate_bg_path:
|
st.image(st.session_state.get("bg_image_data_url"), use_column_width=True)
|
||||||
st.success("背景图片已上传并保存")
|
except Exception:
|
||||||
try:
|
pass
|
||||||
st.image(context_image, caption="已上传背景图片预览", use_column_width=True)
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
except Exception:
|
|
||||||
# ignore upload errors but continue
|
|
||||||
debate_bg_path = None
|
|
||||||
|
|
||||||
debate_manager = DebateManager(llm_client)
|
debate_manager = DebateManager(llm_client)
|
||||||
|
|
||||||
@ -628,11 +651,7 @@ elif mode == "Debate Workshop":
|
|||||||
"round": current_round
|
"round": current_round
|
||||||
})
|
})
|
||||||
st.divider()
|
st.divider()
|
||||||
|
|
||||||
elif event["type"] == "debate_end":
|
|
||||||
st.session_state.debate_finished = True
|
|
||||||
st.success("✅ 辩论结束!正在生成决策报告...")
|
|
||||||
|
|
||||||
# 生成报告
|
# 生成报告
|
||||||
if st.session_state.debate_finished:
|
if st.session_state.debate_finished:
|
||||||
report_generator = ReportGenerator(llm_client)
|
report_generator = ReportGenerator(llm_client)
|
||||||
@ -661,7 +680,7 @@ elif mode == "Debate Workshop":
|
|||||||
"rounds": max_rounds,
|
"rounds": max_rounds,
|
||||||
"agents": selected_agents,
|
"agents": selected_agents,
|
||||||
"language": output_language,
|
"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("✅ 记录已保存到历史档案")
|
st.toast("✅ 记录已保存到历史档案")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user