refactor(adapter): 抽出 provider 抽象层(阶段0),controller 不再依赖火山实现
- 新增 adapter/provider:Provider/Capabilities/Request/Credentials/MetricsRecorder/UpstreamError + 注册表 - 火山实现 Provider(provider.go),Synthesis 收敛为私有 synthesize,提供 BuildRequest 过渡映射 - controller 经 provider.Get(name).Synthesize 调用,voice 路由改在 Request 上覆盖 - UpstreamError 上移到 provider 包,火山用类型别名沿用旧名 - setting 新增 GetTTSRequest/GetDefaultFormat/GetDefaultProviderName - main.go 空导入注册火山 - docs/UPSTREAM_ADAPTER_GUIDE.md 更新为 v1.1(阶段0已落地)
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
package provider
|
||||
|
||||
import "sort"
|
||||
|
||||
// registry 保存所有已注册的上游适配器。
|
||||
// 适配器在自己的 init() 里调用 Register;主干只通过 Get/Names 访问。
|
||||
var registry = map[string]Provider{}
|
||||
|
||||
// Register 注册一个上游适配器。通常在适配器包的 init() 里调用。
|
||||
// 重名注册会 panic —— 说明有重名 bug,应立即暴露。
|
||||
func Register(p Provider) {
|
||||
name := p.Name()
|
||||
if _, ok := registry[name]; ok {
|
||||
panic("provider: duplicate registration: " + name)
|
||||
}
|
||||
registry[name] = p
|
||||
}
|
||||
|
||||
// Get 按名字取已注册的上游适配器;不存在返回 false。
|
||||
func Get(name string) (Provider, bool) {
|
||||
p, ok := registry[name]
|
||||
return p, ok
|
||||
}
|
||||
|
||||
// Names 返回所有已注册适配器的名字(排序稳定),供 admin UI 下拉框使用。
|
||||
func Names() []string {
|
||||
names := make([]string, 0, len(registry))
|
||||
for name := range registry {
|
||||
names = append(names, name)
|
||||
}
|
||||
sort.Strings(names)
|
||||
return names
|
||||
}
|
||||
Reference in New Issue
Block a user