Skip to content

pref(provider):重构配置装配、远程发现缓存与共享模型类型边界#203

Closed
phantom5099 wants to merge 11 commits into
1024XEngineer:mainfrom
phantom5099:provider-phase2-B
Closed

pref(provider):重构配置装配、远程发现缓存与共享模型类型边界#203
phantom5099 wants to merge 11 commits into
1024XEngineer:mainfrom
phantom5099:provider-phase2-B

Conversation

@phantom5099

Copy link
Copy Markdown
Collaborator

变更说明

本 PR 实现 Provider Phase 2 的第二阶段重构,重点解决 provider 来源管理、连接身份、远程模型发现缓存、selection 规则,以及 discovery/catalog 共享类型仍挂在 config 包中的边界问题。

主要改动

  • 新增 custom provider 独立目录加载逻辑,config 负责扫描 providers/*/provider.yaml、合并 builtin/custom、执行去重与校验。
  • 明确 custom provider 不允许声明 default_model,模型来源只来自远程 discovery 与本地缓存。
  • 引入 provider identity,并将其用于 custom provider 去重和 cache/models/*.json 缓存键生成。
  • 重构 provider catalog:统一 discovery、缓存读取、后台刷新与 selection 使用的模型目录来源。
  • ModelDescriptorModelCapabilityHints 等 discovery/catalog 共享类型迁移到 internal/provider/types,不再继续放在 config 包。
  • 新增 provider.RuntimeConfig,将 provider 层需要的最小运行时输入与 ResolvedProviderConfig 解耦。
  • 调整 registry、driver、catalog、runtime 的 provider 构建与模型发现调用链,统一改为使用 provider.RuntimeConfig
  • 收敛 driver 能力命名,将根包能力模型明确为 transport 语义,减少与模型 capability hints 的混淆。

预期收益

  • builtin provider 与 custom provider 的来源、合并和校验规则更清晰,配置边界更稳定。
  • 远程发现模型目录、缓存与当前模型选择逻辑统一收敛,减少行为分裂。
  • provider identity 更准确,能够避免不同协议形态共用错误缓存。
  • provider/types 成为 discovery/catalog 共享领域模型的稳定落点,降低 provider -> config 的反向耦合。
  • 为后续多协议扩展、多模态输入和更完整的模型能力治理保留更好的演进空间。

@phantom5099

Copy link
Copy Markdown
Collaborator Author
  • custom provider 主链路实际上还没打通。这个 PR 在 internal/config/model.go 里开始拒绝 custom provider 使用 driver: openai,README 和测试也都切到了 openaicompat;但仓库当前实际注册的还是 openai.Driver()。结果就是用户按新文档写出来的 custom provider 会被 runtime/selection 视为 unsupported driver,无法选择,也无法做远程 model discovery。

  • 同名且内容完全相同的 custom provider 会被静默吞掉。mergeProviders 本来想把 custom 的同名冲突留给后续 Validate() 报错,但 shouldMergeProviderDefinition() 对“完全相同”的 custom 定义返回了可合并,导致两个不同目录下的重复 provider 会先被折叠成一个,再也报不出重复名错误。

@phantom5099 phantom5099 closed this Apr 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant