当前项目中的provider-models-updated事件存在混乱的情况,这个事件同时由两个不同的来源触发:
- BaseLLMProvider: 在处理模型时触发(如
addCustomModel,removeCustomModel等方法) - ConfigPresenter: 在配置更改时触发(如
addCustomModel,removeCustomModel等方法)
这种设计导致了多种问题:
- 事件循环触发(导致死循环问题)
- 事件语义不清晰(同一事件表示不同的业务含义)
- 代码耦合度高且难以维护
将事件按功能领域分类,并采用统一的命名规范:
-
配置相关事件:
config:provider-changed:提供者配置变更config:system-changed:系统配置变更config:model-list-changed:配置中的模型列表变更
-
模型相关事件: 全部去掉,模型状态和名称事件都有config来发起,和上层settings保持语义一致
-
会话相关事件:
conversation:createdconversation:activatedconversation:cleared
-
通信相关事件:
stream:responsestream:endstream:error
-
应用更新相关事件:
update:status-changedupdate:progressupdate:errorupdate:will-restart
-
同步相关事件:
sync:backup-started:备份开始sync:backup-completed:备份完成sync:backup-error:备份出错sync:import-started:导入开始sync:import-completed:导入完成sync:import-error:导入出错
明确每个组件的事件触发责任:
- ConfigPresenter:仅负责配置相关事件
- BaseLLMProvider:仅负责模型操作,不发起事件
- ThreadPresenter:仅负责会话相关事件
- UpgradePresenter:仅负责应用更新相关事件
BaseLLMProvider ConfigPresenter Presenter(Main) Settings(Renderer)
| | | |
|--- provider-models-updated-->| | |
| |--- provider-models-updated----->| |
| | |--- provider-models-updated---->|
| | | |--- refreshProviderModels()
| | | |
|--- model-status-changed----->| | |
| |--- model-status-changed-------->| |
| | |--- model-status-changed------->|
| | | |--- updateLocalModelStatus()
| | | |
| |--- provider-setting-changed---->| |
| | |--- provider-setting-changed--->|
| | | |--- refreshAllModels()
ConfigPresenter Presenter(Main) Settings(Renderer)
| | |
| |
|--- config:model-list-changed--->| |
| |--- config:model-list-changed-->|
| | |--- refreshProviderModels()
| | |
| | |
|--- model:status-changed-------->| |
| |--- model:status-changed------->|
| | |--- updateLocalModelStatus()
| | |
|--- config:provider-changed----->| |
| |--- config:provider-changed---->|
| | |--- refreshAllModels()