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:
2026-03-28 23:27:02 +08:00
parent 8a200e2bcd
commit ad667fa782
11 changed files with 1150 additions and 1 deletions

View 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)
}