实现支持 OpenAI 和 Anthropic 双协议的统一大模型 API 网关 MVP 版本,包含: - OpenAI 和 Anthropic 协议代理 - 供应商和模型管理 - 用量统计 - 前端配置界面
120 lines
2.2 KiB
Go
120 lines
2.2 KiB
Go
package config
|
||
|
||
import (
|
||
"errors"
|
||
"time"
|
||
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
// CreateModel 创建模型
|
||
func CreateModel(model *Model) error {
|
||
db := GetDB()
|
||
if db == nil {
|
||
return errors.New("数据库未初始化")
|
||
}
|
||
|
||
// 验证供应商是否存在
|
||
var provider Provider
|
||
err := db.First(&provider, "id = ?", model.ProviderID).Error
|
||
if err != nil {
|
||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||
return errors.New("供应商不存在")
|
||
}
|
||
return err
|
||
}
|
||
|
||
model.CreatedAt = time.Now()
|
||
|
||
return db.Create(model).Error
|
||
}
|
||
|
||
// GetModel 获取模型
|
||
func GetModel(id string) (*Model, error) {
|
||
db := GetDB()
|
||
if db == nil {
|
||
return nil, errors.New("数据库未初始化")
|
||
}
|
||
|
||
var model Model
|
||
err := db.First(&model, "id = ?", id).Error
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
return &model, nil
|
||
}
|
||
|
||
// ListModels 列出模型
|
||
func ListModels(providerID string) ([]Model, error) {
|
||
db := GetDB()
|
||
if db == nil {
|
||
return nil, errors.New("数据库未初始化")
|
||
}
|
||
|
||
var models []Model
|
||
var err error
|
||
|
||
if providerID != "" {
|
||
err = db.Where("provider_id = ?", providerID).Find(&models).Error
|
||
} else {
|
||
err = db.Find(&models).Error
|
||
}
|
||
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
return models, nil
|
||
}
|
||
|
||
// UpdateModel 更新模型
|
||
func UpdateModel(id string, updates map[string]interface{}) error {
|
||
db := GetDB()
|
||
if db == nil {
|
||
return errors.New("数据库未初始化")
|
||
}
|
||
|
||
// 如果更新了 provider_id,验证新供应商是否存在
|
||
if providerID, ok := updates["provider_id"].(string); ok {
|
||
var provider Provider
|
||
err := db.First(&provider, "id = ?", providerID).Error
|
||
if err != nil {
|
||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||
return errors.New("供应商不存在")
|
||
}
|
||
return err
|
||
}
|
||
}
|
||
|
||
result := db.Model(&Model{}).Where("id = ?", id).Updates(updates)
|
||
if result.Error != nil {
|
||
return result.Error
|
||
}
|
||
|
||
if result.RowsAffected == 0 {
|
||
return gorm.ErrRecordNotFound
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
// DeleteModel 删除模型
|
||
func DeleteModel(id string) error {
|
||
db := GetDB()
|
||
if db == nil {
|
||
return errors.New("数据库未初始化")
|
||
}
|
||
|
||
result := db.Delete(&Model{}, "id = ?", id)
|
||
if result.Error != nil {
|
||
return result.Error
|
||
}
|
||
|
||
if result.RowsAffected == 0 {
|
||
return gorm.ErrRecordNotFound
|
||
}
|
||
|
||
return nil
|
||
}
|