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 }