buildRerankingConfig constructs a RerankingConfig from the configuration.
( ctx context.Context, rerankCfg *latest.RAGRerankingConfig, buildCfg ManagersBuildConfig, globalLimit int, )
| 142 | |
| 143 | // buildRerankingConfig constructs a RerankingConfig from the configuration. |
| 144 | func buildRerankingConfig( |
| 145 | ctx context.Context, |
| 146 | rerankCfg *latest.RAGRerankingConfig, |
| 147 | buildCfg ManagersBuildConfig, |
| 148 | globalLimit int, |
| 149 | ) (*RerankingConfig, error) { |
| 150 | if rerankCfg == nil { |
| 151 | return nil, nil |
| 152 | } |
| 153 | |
| 154 | if rerankCfg.Model == "" { |
| 155 | slog.ErrorContext(ctx, "Reranking model name is empty") |
| 156 | return nil, errors.New("reranking model is required") |
| 157 | } |
| 158 | |
| 159 | slog.DebugContext(ctx, "Resolving reranking model", |
| 160 | "model_ref", rerankCfg.Model) |
| 161 | |
| 162 | // Resolve model config - check if it's a reference to a defined model or inline |
| 163 | modelCfgVal, err := strategy.ResolveModelConfig(rerankCfg.Model, buildCfg.Models) |
| 164 | if err != nil { |
| 165 | slog.ErrorContext(ctx, "Failed to resolve reranking model", |
| 166 | "model_ref", rerankCfg.Model, |
| 167 | "error", err) |
| 168 | return nil, fmt.Errorf("failed to resolve reranking model %q: %w", rerankCfg.Model, err) |
| 169 | } |
| 170 | modelCfg := &modelCfgVal |
| 171 | |
| 172 | slog.DebugContext(ctx, "Resolved reranking model config", |
| 173 | "provider", modelCfg.Provider, |
| 174 | "model", modelCfg.Model) |
| 175 | |
| 176 | // Create provider for reranking model |
| 177 | rerankProvider, err := buildCfg.NewProvider(ctx, modelCfg) |
| 178 | if err != nil { |
| 179 | slog.ErrorContext(ctx, "Failed to create reranking provider", |
| 180 | "provider", modelCfg.Provider, |
| 181 | "model", modelCfg.Model, |
| 182 | "error", err) |
| 183 | return nil, fmt.Errorf("failed to create reranking provider: %w", err) |
| 184 | } |
| 185 | |
| 186 | slog.DebugContext(ctx, "Created reranking provider", |
| 187 | "provider_id", rerankProvider.ID()) |
| 188 | |
| 189 | // Determine effective TopK: |
| 190 | // - If user provided a positive top_k, respect it. |
| 191 | // - Otherwise, default to the global results limit when set. |
| 192 | // This avoids reranking unbounded result sets while still |
| 193 | // using a sensible, user-controlled cap. |
| 194 | effectiveTopK := rerankCfg.TopK |
| 195 | if effectiveTopK <= 0 && globalLimit > 0 { |
| 196 | effectiveTopK = globalLimit |
| 197 | } |
| 198 | |
| 199 | // Create reranker |
| 200 | reranker, err := rerank.NewLLMReranker(rerank.Config{ |
| 201 | Model: rerankProvider, |
no test coverage detected