This commit is contained in:
sam 2025-10-05 20:19:48 +08:00
parent b7283c859f
commit bd1004c384

View File

@ -1995,34 +1995,98 @@ def render_backtest_review() -> None:
st.info("请选择至少一个配置进行对比。") st.info("请选择至少一个配置进行对比。")
def render_settings() -> None: def render_config_overview() -> None:
LOGGER.info("渲染设置页面", extra=LOG_EXTRA) """Render a concise overview of persisted configuration values."""
st.header("数据与设置")
LOGGER.info("渲染配置概览页", extra=LOG_EXTRA)
cfg = get_config() cfg = get_config()
LOGGER.debug("当前 TuShare Token 是否已配置=%s", bool(cfg.tushare_token), extra=LOG_EXTRA)
st.subheader("核心配置概览")
# 基础配置 col1, col2, col3 = st.columns(3)
col1, col2 = st.columns([2, 1]) col1.metric("决策方式", cfg.decision_method.upper())
with col1: col2.metric("自动更新数据", "启用" if cfg.auto_update_data else "关闭")
token = st.text_input("TuShare Token", value=cfg.tushare_token or "", type="password") col3.metric("数据更新间隔(天)", cfg.data_update_interval)
with col2:
auto_update = st.checkbox( col4, col5, col6 = st.columns(3)
"自动更新数据", col4.metric("强制刷新", "开启" if cfg.force_refresh else "关闭")
value=cfg.auto_update_data, col5.metric("TuShare Token", "已配置" if cfg.tushare_token else "未配置")
help="勾选后每次启动程序将自动执行Tushare和RSS数据拉取" col6.metric("配置文件", cfg.data_paths.config_file.name)
st.caption(f"配置文件路径:{cfg.data_paths.config_file}")
st.divider()
st.subheader("RSS 数据源状态")
rss_sources = cfg.rss_sources or {}
if rss_sources:
rows: List[Dict[str, object]] = []
for name, payload in rss_sources.items():
if isinstance(payload, dict):
rows.append(
{
"名称": name,
"启用": "" if payload.get("enabled", True) else "",
"URL": payload.get("url", "-"),
"关键词数": len(payload.get("keywords", []) or []),
}
)
elif isinstance(payload, bool):
rows.append(
{
"名称": name,
"启用": "" if payload else "",
"URL": "-",
"关键词数": 0,
}
)
if rows:
st.dataframe(pd.DataFrame(rows), hide_index=True, width="stretch")
else:
st.info("未配置 RSS 数据源。")
else:
st.info("未在配置文件中找到 RSS 数据源。")
st.divider()
st.subheader("部门配置")
dept_rows: List[Dict[str, object]] = []
for code, dept in cfg.departments.items():
dept_rows.append(
{
"部门": dept.title or code,
"代码": code,
"权重": dept.weight,
"LLM 策略": dept.llm.strategy,
"模板": dept.prompt_template_id or f"{code}_dept",
"模板版本": dept.prompt_template_version or "(激活版本)",
}
) )
if dept_rows:
st.dataframe(pd.DataFrame(dept_rows), hide_index=True, width="stretch")
else:
st.info("尚未配置任何部门。")
if st.button("保存设置"): st.divider()
LOGGER.info("保存设置按钮被点击", extra=LOG_EXTRA) st.subheader("LLM 成本控制")
cfg.tushare_token = token.strip() or None cost = cfg.llm_cost
cfg.auto_update_data = auto_update col_a, col_b, col_c, col_d = st.columns(4)
LOGGER.info("TuShare Token 更新,是否为空=%s", cfg.tushare_token is None, extra=LOG_EXTRA) col_a.metric("成本控制", "启用" if cost.enabled else "关闭")
LOGGER.info("自动更新数据设置=%s", cfg.auto_update_data, extra=LOG_EXTRA) col_b.metric("小时预算($)", f"{cost.hourly_budget:.2f}")
save_config() col_c.metric("日预算($)", f"{cost.daily_budget:.2f}")
st.success("设置已保存,仅在当前会话生效。") col_d.metric("月预算($)", f"{cost.monthly_budget:.2f}")
st.write("新闻源开关与数据库备份将在此配置。") if cost.model_weights:
st.caption("提示LLM 设置已迁移至单独的标签页。") weight_rows = (
pd.DataFrame(
[
{"模型": model, "占比上限": f"{limit * 100:.0f}%"}
for model, limit in cost.model_weights.items()
]
)
)
st.dataframe(weight_rows, hide_index=True, width="stretch")
else:
st.caption("未配置模型占比限制。")
st.divider()
st.caption("提示数据源、LLM 及投资组合设置可在对应标签页中调整。")
def render_llm_settings() -> None: def render_llm_settings() -> None:
@ -2821,10 +2885,10 @@ def main() -> None:
render_log_viewer() render_log_viewer()
with tabs[3]: with tabs[3]:
st.header("系统设置") st.header("系统设置")
settings_tabs = st.tabs(["基本配置", "LLM 设置", "投资组合", "数据源"]) settings_tabs = st.tabs(["配置概览", "LLM 设置", "投资组合", "数据源"])
with settings_tabs[0]: with settings_tabs[0]:
render_settings() render_config_overview()
with settings_tabs[1]: with settings_tabs[1]:
render_llm_settings() render_llm_settings()