mirror of
https://github.com/snailyp/gemini-balance.git
synced 2026-05-12 02:19:59 +08:00
引入了思考模型 (THINKING_MODELS) 和相应的预算映射 (THINKING_BUDGET_MAP) 的概念,允许在配置中指定用于特定内部处理流程(如“思考过程”)的模型及其 token 预算。 主要变更包括: 后端 (Python): - 在 `Settings` 中添加了 `THINKING_MODELS` (List[str]) 和 `THINKING_BUDGET_MAP` (Dict[str, float]) 配置项。 - 增强了 `config._parse_db_value` 函数,以正确解析来自数据库或环境变量的列表和字典字符串(包括处理单引号和提供更详细的日志)。 - 更新了相关服务(如 `GeminiChatService`, `ModelService`, `ConfigService`)以识别和利用这些新配置。 - 调整了中间件和路由以适应可能的逻辑变更。 前端 (HTML/JavaScript): - 在配置编辑器 (`config_editor.html`, `config_editor.js`) 中添加了新的 UI 部分来管理思考模型列表和预算映射。 - 实现了动态添加/删除思考模型的功能,并自动关联/解除关联对应的预算映射条目。 - 预算映射中的模型名称(键)是只读的,自动从思考模型列表同步;预算值(值)是可编辑的数字输入。 - 更新了表单数据的加载 (`populateForm`) 和收集 (`collectFormData`) 逻辑,以正确处理新的列表和映射类型。 - 移除了手动添加预算映射的按钮,改为自动关联。 - 改进了数组和映射项的 DOM 操作逻辑,包括使用 UUID 来关联模型和预算项。
41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
import json
|
|
|
|
from fastapi import Request
|
|
from starlette.middleware.base import BaseHTTPMiddleware
|
|
|
|
from app.log.logger import get_request_logger
|
|
|
|
logger = get_request_logger()
|
|
|
|
|
|
# 添加中间件类
|
|
class RequestLoggingMiddleware(BaseHTTPMiddleware):
|
|
async def dispatch(self, request: Request, call_next):
|
|
# 记录请求路径
|
|
logger.info(f"Request path: {request.url.path}")
|
|
|
|
# 获取并记录请求体
|
|
try:
|
|
body = await request.body()
|
|
if body:
|
|
body_str = body.decode()
|
|
# 尝试格式化JSON
|
|
try:
|
|
formatted_body = json.loads(body_str)
|
|
logger.info(
|
|
f"Formatted request body:\n{json.dumps(formatted_body, indent=2, ensure_ascii=False)}"
|
|
)
|
|
except json.JSONDecodeError:
|
|
logger.error("Request body is not valid JSON.")
|
|
except Exception as e:
|
|
logger.error(f"Error reading request body: {str(e)}")
|
|
|
|
# 重置请求的接收器,以便后续处理器可以继续读取请求体
|
|
async def receive():
|
|
return {"type": "http.request", "body": body, "more_body": False}
|
|
|
|
request._receive = receive
|
|
|
|
response = await call_next(request)
|
|
return response
|