126 lines
3.8 KiB
Python
126 lines
3.8 KiB
Python
|
|
"""
|
|||
|
|
AI Agent 前端主入口
|
|||
|
|
采用模块化架构,仅负责组装各组件
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import sys
|
|||
|
|
import os
|
|||
|
|
|
|||
|
|
# 添加项目根目录到 Python 路径,支持绝对导入
|
|||
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|||
|
|
|
|||
|
|
import streamlit as st
|
|||
|
|
|
|||
|
|
# 使用绝对导入
|
|||
|
|
from frontend.config import config
|
|||
|
|
from frontend.state import AppState
|
|||
|
|
from frontend.components.sidebar import render_sidebar
|
|||
|
|
from frontend.components.chat_area import render_chat_area
|
|||
|
|
from frontend.components.info_panel import render_info_panel
|
|||
|
|
|
|||
|
|
|
|||
|
|
# =============================================================================
|
|||
|
|
# 页面配置
|
|||
|
|
# =============================================================================
|
|||
|
|
st.set_page_config(
|
|||
|
|
page_title=config.page_title,
|
|||
|
|
page_icon=config.page_icon,
|
|||
|
|
layout=config.layout
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
|
|||
|
|
# =============================================================================
|
|||
|
|
# 初始化状态
|
|||
|
|
# =============================================================================
|
|||
|
|
AppState.init()
|
|||
|
|
|
|||
|
|
def apply_custom_css():
|
|||
|
|
"""应用自定义CSS样式,实现极简风格"""
|
|||
|
|
st.markdown("""
|
|||
|
|
<style>
|
|||
|
|
/* 移除顶部默认空白 */
|
|||
|
|
.block-container {
|
|||
|
|
padding-top: 2rem !important;
|
|||
|
|
padding-bottom: 2rem !important;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 侧边栏样式优化:降低背景色对比度,稍微暗一点提高区分度 */
|
|||
|
|
[data-testid="stSidebar"] {
|
|||
|
|
background-color: #f0f2f5 !important;
|
|||
|
|
border-right: 1px solid #e1e4e8;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 隐藏标题和头像边框的粗重线条 */
|
|||
|
|
hr {
|
|||
|
|
margin: 1em 0;
|
|||
|
|
border-color: #eee;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 自定义按钮样式:去除强烈的背景色,使用浅色线框或扁平风 */
|
|||
|
|
.stButton>button {
|
|||
|
|
border-radius: 8px;
|
|||
|
|
font-weight: 500;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 覆盖 Primary 按钮默认的刺眼大红色,改为柔和的深色高亮 */
|
|||
|
|
.stButton>button[kind="primary"] {
|
|||
|
|
background-color: #e5e7eb !important;
|
|||
|
|
color: #1f2937 !important;
|
|||
|
|
border: 1px solid #d1d5db !important;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 覆盖 Primary 按钮悬停效果 */
|
|||
|
|
.stButton>button[kind="primary"]:hover {
|
|||
|
|
background-color: #d1d5db !important;
|
|||
|
|
border-color: #9ca3af !important;
|
|||
|
|
color: #111827 !important;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 普通按钮悬停效果 */
|
|||
|
|
.stButton>button:hover {
|
|||
|
|
border-color: #9ca3af;
|
|||
|
|
color: #1f2937;
|
|||
|
|
background-color: #f9fafb;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 聊天输入框美化 */
|
|||
|
|
[data-testid="stChatInput"] {
|
|||
|
|
border-radius: 12px;
|
|||
|
|
border: 1px solid #e0e0e0;
|
|||
|
|
box-shadow: 0 2px 10px rgba(0,0,0,0.03);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 用户和 AI 的头像调整 */
|
|||
|
|
.stChatMessage {
|
|||
|
|
padding: 1rem 0;
|
|||
|
|
border-bottom: 1px solid #f8f8f8;
|
|||
|
|
}
|
|||
|
|
</style>
|
|||
|
|
""", unsafe_allow_html=True)
|
|||
|
|
|
|||
|
|
|
|||
|
|
# =============================================================================
|
|||
|
|
# 主界面
|
|||
|
|
# =============================================================================
|
|||
|
|
def main():
|
|||
|
|
"""主界面渲染 - 极简宽屏布局"""
|
|||
|
|
# 应用 CSS
|
|||
|
|
apply_custom_css()
|
|||
|
|
|
|||
|
|
# 顶部标题(可选,也可以不放,让界面更像对话框)
|
|||
|
|
st.markdown("<h3 style='text-align: center; font-weight: 400; color: #555; margin-bottom: 2rem;'>个人助手</h3>", unsafe_allow_html=True)
|
|||
|
|
|
|||
|
|
# 左侧边栏:合并用户登录、模型选择和历史对话
|
|||
|
|
with st.sidebar:
|
|||
|
|
render_sidebar()
|
|||
|
|
# 将原本右侧的信息面板简化并移入侧边栏底部
|
|||
|
|
st.divider()
|
|||
|
|
render_info_panel()
|
|||
|
|
|
|||
|
|
# 中间主区域:全宽的聊天区域
|
|||
|
|
render_chat_area()
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
main()
|