实现支持 OpenAI 和 Anthropic 双协议的统一大模型 API 网关 MVP 版本,包含: - OpenAI 和 Anthropic 协议代理 - 供应商和模型管理 - 用量统计 - 前端配置界面
103 lines
1.8 KiB
Go
103 lines
1.8 KiB
Go
package config
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// CreateProvider 创建供应商
|
|
func CreateProvider(provider *Provider) error {
|
|
db := GetDB()
|
|
if db == nil {
|
|
return errors.New("数据库未初始化")
|
|
}
|
|
|
|
provider.CreatedAt = time.Now()
|
|
provider.UpdatedAt = time.Now()
|
|
|
|
return db.Create(provider).Error
|
|
}
|
|
|
|
// GetProvider 获取供应商
|
|
func GetProvider(id string, maskKey bool) (*Provider, error) {
|
|
db := GetDB()
|
|
if db == nil {
|
|
return nil, errors.New("数据库未初始化")
|
|
}
|
|
|
|
var provider Provider
|
|
err := db.First(&provider, "id = ?", id).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if maskKey {
|
|
provider.MaskAPIKey()
|
|
}
|
|
|
|
return &provider, nil
|
|
}
|
|
|
|
// ListProviders 列出所有供应商
|
|
func ListProviders() ([]Provider, error) {
|
|
db := GetDB()
|
|
if db == nil {
|
|
return nil, errors.New("数据库未初始化")
|
|
}
|
|
|
|
var providers []Provider
|
|
err := db.Find(&providers).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// 掩码所有 API Key
|
|
for i := range providers {
|
|
providers[i].MaskAPIKey()
|
|
}
|
|
|
|
return providers, nil
|
|
}
|
|
|
|
// UpdateProvider 更新供应商
|
|
func UpdateProvider(id string, updates map[string]interface{}) error {
|
|
db := GetDB()
|
|
if db == nil {
|
|
return errors.New("数据库未初始化")
|
|
}
|
|
|
|
updates["updated_at"] = time.Now()
|
|
|
|
result := db.Model(&Provider{}).Where("id = ?", id).Updates(updates)
|
|
if result.Error != nil {
|
|
return result.Error
|
|
}
|
|
|
|
if result.RowsAffected == 0 {
|
|
return gorm.ErrRecordNotFound
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// DeleteProvider 删除供应商
|
|
func DeleteProvider(id string) error {
|
|
db := GetDB()
|
|
if db == nil {
|
|
return errors.New("数据库未初始化")
|
|
}
|
|
|
|
result := db.Delete(&Provider{}, "id = ?", id)
|
|
if result.Error != nil {
|
|
return result.Error
|
|
}
|
|
|
|
if result.RowsAffected == 0 {
|
|
return gorm.ErrRecordNotFound
|
|
}
|
|
|
|
return nil
|
|
}
|