fix:修复API设置页面测试参数缺失、激活状态不同步问题

This commit is contained in:
xiamuceer-j
2026-01-21 14:52:22 +08:00
parent ae37d8386e
commit 802f955a83
+37 -1
View File
@@ -152,6 +152,9 @@ async def save_settings(
创建或更新当前用户的设置(Upsert)
如果设置已存在则更新,否则创建新设置
仅保存到数据库
注意:手动保存配置后会自动取消之前激活的预设状态,
因为手动修改的配置可能与预设不一致
"""
# 查找现有设置
result = await db.execute(
@@ -167,6 +170,36 @@ async def save_settings(
for key, value in settings_dict.items():
setattr(settings, key, value)
# 检查并取消预设激活状态
# 因为用户手动修改了配置,可能与之前激活的预设不一致
try:
prefs = json.loads(settings.preferences or '{}')
api_presets = prefs.get('api_presets', {'presets': [], 'version': '1.0'})
presets = api_presets.get('presets', [])
# 找到激活的预设并检查是否与当前保存的配置一致
active_preset = next((p for p in presets if p.get('is_active')), None)
if active_preset:
preset_config = active_preset.get('config', {})
# 检查配置是否发生变化
config_changed = (
preset_config.get('api_provider') != settings_dict.get('api_provider', settings.api_provider) or
preset_config.get('api_key') != settings_dict.get('api_key', settings.api_key) or
preset_config.get('api_base_url') != settings_dict.get('api_base_url', settings.api_base_url) or
preset_config.get('llm_model') != settings_dict.get('llm_model', settings.llm_model) or
preset_config.get('temperature') != settings_dict.get('temperature', settings.temperature) or
preset_config.get('max_tokens') != settings_dict.get('max_tokens', settings.max_tokens)
)
if config_changed:
# 取消激活状态
active_preset['is_active'] = False
prefs['api_presets'] = api_presets
settings.preferences = json.dumps(prefs, ensure_ascii=False)
logger.info(f"用户 {user.user_id} 手动修改配置,已取消预设 {active_preset.get('name')} 的激活状态")
except (json.JSONDecodeError, TypeError) as e:
logger.warning(f"解析用户 {user.user_id} 的preferences失败: {e}")
await db.commit()
await db.refresh(settings)
logger.info(f"用户 {user.user_id} 更新设置")
@@ -1019,12 +1052,15 @@ async def test_preset(
raise HTTPException(status_code=404, detail="预设不存在")
# 使用现有的test_api_connection逻辑
# 确保传递完整参数,与当前配置测试保持一致
config = target_preset['config']
test_request = ApiTestRequest(
api_key=config['api_key'],
api_base_url=config.get('api_base_url', ''),
provider=config['api_provider'],
llm_model=config['llm_model']
llm_model=config['llm_model'],
temperature=config.get('temperature'), # 使用预设中的温度参数
max_tokens=config.get('max_tokens') # 使用预设中的最大tokens参数
)
logger.info(f"用户 {user.user_id} 测试预设: {target_preset['name']}")