mirror of
https://github.com/snailyp/gemini-balance.git
synced 2026-09-07 00:36:36 +08:00
本次提交主要包含以下更改: 1. **后端更新**: - 在 `app/service/config/config_service.py` 中新增 `fetch_ui_models` 方法,用于获取可用于 UI 的模型列表,并处理相关的错误情况。 - 在 `app/router/config_routes.py` 中新增 `/ui/models` 路由,提供模型列表的 API 接口,并添加身份验证逻辑。 2. **前端更新**: - 在 `app/static/js/config_editor.js` 中实现模型助手的功能,包括模型列表的加载、搜索和选择。 - 在 `app/templates/config_editor.html` 中添加模型助手的模态框和相关的 UI 元素,允许用户从列表中选择模型。 这些更改旨在增强用户体验,使用户能够更方便地选择和管理模型,提高配置界面的交互性和功能性。
75 lines
2.8 KiB
Python
75 lines
2.8 KiB
Python
"""
|
|
配置路由模块
|
|
"""
|
|
|
|
from typing import Any, Dict
|
|
|
|
from fastapi import APIRouter, HTTPException, Request
|
|
from fastapi.responses import RedirectResponse
|
|
|
|
from app.core.security import verify_auth_token
|
|
from app.log.logger import Logger, get_config_routes_logger
|
|
from app.service.config.config_service import ConfigService
|
|
|
|
router = APIRouter(prefix="/api/config", tags=["config"])
|
|
|
|
logger = get_config_routes_logger()
|
|
|
|
|
|
@router.get("", response_model=Dict[str, Any])
|
|
async def get_config(request: Request):
|
|
auth_token = request.cookies.get("auth_token")
|
|
if not auth_token or not verify_auth_token(auth_token):
|
|
logger.warning("Unauthorized access attempt to config page")
|
|
return RedirectResponse(url="/", status_code=302)
|
|
return await ConfigService.get_config()
|
|
|
|
|
|
@router.put("", response_model=Dict[str, Any])
|
|
async def update_config(config_data: Dict[str, Any], request: Request):
|
|
auth_token = request.cookies.get("auth_token")
|
|
if not auth_token or not verify_auth_token(auth_token):
|
|
logger.warning("Unauthorized access attempt to config page")
|
|
return RedirectResponse(url="/", status_code=302)
|
|
try:
|
|
result = await ConfigService.update_config(config_data)
|
|
# 配置更新成功后,立即更新所有 logger 的级别
|
|
Logger.update_log_levels(config_data["LOG_LEVEL"])
|
|
logger.info("Log levels updated after configuration change.")
|
|
return result
|
|
except Exception as e:
|
|
logger.error(f"Error updating config or log levels: {e}", exc_info=True)
|
|
raise HTTPException(status_code=400, detail=str(e))
|
|
|
|
|
|
@router.post("/reset", response_model=Dict[str, Any])
|
|
async def reset_config(request: Request):
|
|
auth_token = request.cookies.get("auth_token")
|
|
if not auth_token or not verify_auth_token(auth_token):
|
|
logger.warning("Unauthorized access attempt to config page")
|
|
return RedirectResponse(url="/", status_code=302)
|
|
try:
|
|
return await ConfigService.reset_config()
|
|
except Exception as e:
|
|
raise HTTPException(status_code=400, detail=str(e))
|
|
|
|
|
|
@router.get("/ui/models")
|
|
async def get_ui_models(request: Request):
|
|
auth_token_cookie = request.cookies.get("auth_token")
|
|
if not auth_token_cookie or not verify_auth_token(auth_token_cookie):
|
|
logger.warning("Unauthorized access attempt to /api/config/ui/models")
|
|
raise HTTPException(status_code=403, detail="Not authenticated")
|
|
|
|
try:
|
|
models = await ConfigService.fetch_ui_models()
|
|
return models
|
|
except HTTPException as e:
|
|
raise e
|
|
except Exception as e:
|
|
logger.error(f"Unexpected error in /ui/models endpoint: {e}", exc_info=True)
|
|
raise HTTPException(
|
|
status_code=500,
|
|
detail=f"An unexpected error occurred while fetching UI models: {str(e)}",
|
|
)
|