1
0
Files
nex/backend/internal/router/model_router.go
lanyuanxiaoyao 915b004924 feat: 初始化 AI Gateway 项目
实现支持 OpenAI 和 Anthropic 双协议的统一大模型 API 网关 MVP 版本,包含:
- OpenAI 和 Anthropic 协议代理
- 供应商和模型管理
- 用量统计
- 前端配置界面
2026-04-15 16:53:28 +08:00

72 lines
1.4 KiB
Go

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
}