feat: 初始化 AI Gateway 项目
实现支持 OpenAI 和 Anthropic 双协议的统一大模型 API 网关 MVP 版本,包含: - OpenAI 和 Anthropic 协议代理 - 供应商和模型管理 - 用量统计 - 前端配置界面
This commit is contained in:
71
backend/internal/router/model_router.go
Normal file
71
backend/internal/router/model_router.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"nex/backend/internal/config"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrModelNotFound = errors.New("模型未找到")
|
||||
ErrModelDisabled = errors.New("模型已禁用")
|
||||
ErrProviderDisabled = errors.New("供应商已禁用")
|
||||
)
|
||||
|
||||
// RouteResult 路由结果
|
||||
type RouteResult struct {
|
||||
Provider *config.Provider
|
||||
Model *config.Model
|
||||
}
|
||||
|
||||
// Router 模型路由器
|
||||
type Router struct{}
|
||||
|
||||
// NewRouter 创建路由器
|
||||
func NewRouter() *Router {
|
||||
return &Router{}
|
||||
}
|
||||
|
||||
// Route 根据模型名称路由到供应商
|
||||
func (r *Router) Route(modelName string) (*RouteResult, error) {
|
||||
// 查询模型
|
||||
models, err := config.ListModels("")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询模型失败: %w", err)
|
||||
}
|
||||
|
||||
// 查找匹配的模型
|
||||
var targetModel *config.Model
|
||||
for i := range models {
|
||||
if models[i].ModelName == modelName {
|
||||
targetModel = &models[i]
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if targetModel == nil {
|
||||
return nil, ErrModelNotFound
|
||||
}
|
||||
|
||||
// 检查模型是否启用
|
||||
if !targetModel.Enabled {
|
||||
return nil, ErrModelDisabled
|
||||
}
|
||||
|
||||
// 查询供应商
|
||||
provider, err := config.GetProvider(targetModel.ProviderID, false)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询供应商失败: %w", err)
|
||||
}
|
||||
|
||||
// 检查供应商是否启用
|
||||
if !provider.Enabled {
|
||||
return nil, ErrProviderDisabled
|
||||
}
|
||||
|
||||
return &RouteResult{
|
||||
Provider: provider,
|
||||
Model: targetModel,
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user