Spaces:
Runtime error
Runtime error
File size: 3,884 Bytes
927965d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# UI状态强制设置功能
## 概述
在 `browser_utils/model_management.py` 中实现了强制设置UI状态的功能,确保 `isAdvancedOpen` 始终为 `true`,`areToolsOpen` 始终为 `false`。
## 实现的功能
### 1. 状态验证函数
#### `_verify_ui_state_settings(page, req_id)`
- **功能**: 验证当前localStorage中的UI状态设置
- **返回**: 包含验证结果的字典
- `exists`: localStorage是否存在
- `isAdvancedOpen`: 当前isAdvancedOpen的值
- `areToolsOpen`: 当前areToolsOpen的值
- `needsUpdate`: 是否需要更新
- `prefs`: 当前的preferences对象(如果存在)
- `error`: 错误信息(如果有)
### 2. 强制设置函数
#### `_force_ui_state_settings(page, req_id)`
- **功能**: 强制设置UI状态为正确值
- **设置**: `isAdvancedOpen = true`, `areToolsOpen = false`
- **返回**: 设置是否成功的布尔值
- **特点**: 会自动验证设置是否生效
#### `_force_ui_state_with_retry(page, req_id, max_retries=3, retry_delay=1.0)`
- **功能**: 带重试机制的UI状态强制设置
- **参数**:
- `max_retries`: 最大重试次数(默认3次)
- `retry_delay`: 重试延迟秒数(默认1秒)
- **返回**: 最终是否设置成功
### 3. 完整流程函数
#### `_verify_and_apply_ui_state(page, req_id)`
- **功能**: 验证并应用UI状态设置的完整流程
- **流程**:
1. 首先验证当前状态
2. 如果需要更新,则调用强制设置功能
3. 返回操作是否成功
- **特点**: 这是推荐使用的主要接口
## 集成点
### 1. 模型切换流程
在 `switch_ai_studio_model()` 函数中的关键节点:
- 设置localStorage后
- 页面导航完成后
- 恢复流程中
### 2. 页面初始化流程
在 `_handle_initial_model_state_and_storage()` 函数中:
- 检查localStorage状态时
- 页面重新加载后
### 3. 模型显示设置流程
在 `_set_model_from_page_display()` 函数中:
- 更新localStorage时
## 验证和重试机制
### 验证机制
- 每次设置后都会验证是否生效
- 支持检测JSON解析错误
- 提供详细的状态信息
### 重试机制
- 默认最多重试3次
- 每次重试间隔1秒
- 记录详细的重试日志
- 失败后会记录错误信息
### 关键操作后的验证
系统会在以下操作后自动验证UI状态:
1. **网页切换模型后**
2. **页面初始化完成后**
3. **页面重新加载后**
4. **任何需要重载页面的操作后**
如果验证发现设置不正确,系统会:
1. 继续执行刷新操作
2. 重新应用设置
3. 直到验证成功为止
## 日志记录
所有操作都有详细的日志记录:
- `[req_id] 开始验证UI状态设置...`
- `[req_id] UI状态验证结果: isAdvancedOpen=true, areToolsOpen=false, needsUpdate=false`
- `[req_id] ✅ UI状态设置在第 1 次尝试中成功`
- `[req_id] ⚠️ UI状态设置验证失败,可能需要重试`
## 错误处理
- 捕获并处理JSON解析错误
- 捕获并处理页面操作异常
- 提供详细的错误信息
- 在失败时不会中断主要流程
## 使用示例
```python
# 基本验证
result = await _verify_ui_state_settings(page, req_id)
if result['needsUpdate']:
print("需要更新UI状态")
# 强制设置
success = await _force_ui_state_settings(page, req_id)
if success:
print("UI状态设置成功")
# 完整流程(推荐)
success = await _verify_and_apply_ui_state(page, req_id)
if success:
print("UI状态验证和应用成功")
```
## 配置要求
确保以下设置始终生效:
- `isAdvancedOpen: true` - 高级选项面板始终打开
- `areToolsOpen: false` - 工具面板始终关闭
这些设置对于系统的正常运行至关重要,特别是 `areToolsOpen` 必须为 `false`。
|