feat: implement core architecture (v0.0.2)
- Implement Config class with YAML loading and environment variable support - Implement Provider interface and factory pattern - Implement SiliconFlow provider as example - Implement Translator core class with prompt management - Create CLI entry point - Add configuration template and unit tests - Update changelog and discussion records Version: 0.0.2
This commit is contained in:
99
internal/provider/factory.go
Normal file
99
internal/provider/factory.go
Normal file
@@ -0,0 +1,99 @@
|
||||
package provider
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// ProviderFactory 厂商工厂
|
||||
type ProviderFactory struct {
|
||||
providers map[string]func(ProviderConfig) (Provider, error)
|
||||
mu sync.RWMutex
|
||||
}
|
||||
|
||||
// NewProviderFactory 创建工厂实例
|
||||
func NewProviderFactory() *ProviderFactory {
|
||||
factory := &ProviderFactory{
|
||||
providers: make(map[string]func(ProviderConfig) (Provider, error)),
|
||||
}
|
||||
|
||||
// 注册所有厂商(延迟注册,避免循环依赖)
|
||||
// 实际注册在init()函数中完成
|
||||
|
||||
return factory
|
||||
}
|
||||
|
||||
// Register 注册厂商构造函数
|
||||
func (f *ProviderFactory) Register(name string, creator func(ProviderConfig) (Provider, error)) {
|
||||
f.mu.Lock()
|
||||
defer f.mu.Unlock()
|
||||
f.providers[name] = creator
|
||||
}
|
||||
|
||||
// Create 创建厂商实例
|
||||
func (f *ProviderFactory) Create(name string, config ProviderConfig) (Provider, error) {
|
||||
f.mu.RLock()
|
||||
creator, exists := f.providers[name]
|
||||
f.mu.RUnlock()
|
||||
|
||||
if !exists {
|
||||
return nil, fmt.Errorf("不支持的厂商: %s", name)
|
||||
}
|
||||
|
||||
provider, err := creator(config)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("创建厂商实例失败: %w", err)
|
||||
}
|
||||
|
||||
if err := provider.Validate(); err != nil {
|
||||
return nil, fmt.Errorf("厂商配置验证失败: %w", err)
|
||||
}
|
||||
|
||||
return provider, nil
|
||||
}
|
||||
|
||||
// HasProvider 检查是否支持指定厂商
|
||||
func (f *ProviderFactory) HasProvider(name string) bool {
|
||||
f.mu.RLock()
|
||||
defer f.mu.RUnlock()
|
||||
_, exists := f.providers[name]
|
||||
return exists
|
||||
}
|
||||
|
||||
// GetSupportedProviders 获取所有支持的厂商
|
||||
func (f *ProviderFactory) GetSupportedProviders() []string {
|
||||
f.mu.RLock()
|
||||
defer f.mu.RUnlock()
|
||||
|
||||
providers := make([]string, 0, len(f.providers))
|
||||
for name := range f.providers {
|
||||
providers = append(providers, name)
|
||||
}
|
||||
return providers
|
||||
}
|
||||
|
||||
// 全局工厂实例
|
||||
var defaultFactory *ProviderFactory
|
||||
|
||||
// init 初始化默认工厂
|
||||
func init() {
|
||||
defaultFactory = NewProviderFactory()
|
||||
|
||||
// 这里可以注册厂商,但由于循环依赖,实际注册会在各厂商的init()中完成
|
||||
// 或者在main包中手动注册
|
||||
}
|
||||
|
||||
// GetDefaultFactory 获取默认工厂
|
||||
func GetDefaultFactory() *ProviderFactory {
|
||||
return defaultFactory
|
||||
}
|
||||
|
||||
// CreateProvider 使用默认工厂创建厂商
|
||||
func CreateProvider(name string, config ProviderConfig) (Provider, error) {
|
||||
return defaultFactory.Create(name, config)
|
||||
}
|
||||
|
||||
// RegisterProvider 注册厂商到默认工厂
|
||||
func RegisterProvider(name string, creator func(ProviderConfig) (Provider, error)) {
|
||||
defaultFactory.Register(name, creator)
|
||||
}
|
||||
Reference in New Issue
Block a user