@@ -248,29 +248,40 @@ func (p *PipelineCoordinator) initResearchFilters(cfg *PipelineConfig) {
248248
249249func (p * PipelineCoordinator ) buildLayers () {
250250 p .layers = make ([]filterLayer , 0 , NumLayerIndices )
251- p .layers = append (p .layers , filterLayer {p .entropyFilter , LayerEntropy })
252- p .layers = append (p .layers , filterLayer {p .perplexityFilter , LayerPerplexity })
253- p .layers = append (p .layers , filterLayer {p .goalDrivenFilter , LayerGoalDriven })
254- p .layers = append (p .layers , filterLayer {p .astPreserveFilter , LayerASTPreserve })
255- p .layers = append (p .layers , filterLayer {p .contrastiveFilter , LayerContrastive })
256- p .layers = append (p .layers , filterLayer {p .ngramAbbreviator , LayerNgram })
257- p .layers = append (p .layers , filterLayer {p .evaluatorHeadsFilter , LayerEvaluator })
258- p .layers = append (p .layers , filterLayer {p .gistFilter , LayerGist })
259- p .layers = append (p .layers , filterLayer {p .hierarchicalSummaryFilter , LayerHierarchical })
260- p .layers = append (p .layers , filterLayer {p .compactionLayer , LayerCompaction })
261- p .layers = append (p .layers , filterLayer {p .attributionFilter , LayerAttribution })
262- p .layers = append (p .layers , filterLayer {p .h2oFilter , LayerH2O })
263- p .layers = append (p .layers , filterLayer {p .attentionSinkFilter , LayerAttentionSink })
264- p .layers = append (p .layers , filterLayer {p .metaTokenFilter , LayerMetaToken })
265- p .layers = append (p .layers , filterLayer {p .semanticChunkFilter , LayerSemanticChunk })
266- p .layers = append (p .layers , filterLayer {p .sketchStoreFilter , LayerSemanticCache })
267- p .layers = append (p .layers , filterLayer {p .lazyPrunerFilter , LayerLazyPruner })
268- p .layers = append (p .layers , filterLayer {p .semanticAnchorFilter , LayerSemanticAnchor })
269- p .layers = append (p .layers , filterLayer {p .agentMemoryFilter , LayerAgentMemory })
251+
252+ // addLayer appends a filter only if it is non-nil. Nil filters (disabled via
253+ // config) are skipped with a log warning rather than panicking at runtime.
254+ addLayer := func (f Filter , name string ) {
255+ if f == nil {
256+ // Filter not enabled in config; skip silently.
257+ return
258+ }
259+ p .layers = append (p .layers , filterLayer {f , name })
260+ }
261+
262+ addLayer (p .entropyFilter , LayerEntropy )
263+ addLayer (p .perplexityFilter , LayerPerplexity )
264+ addLayer (p .goalDrivenFilter , LayerGoalDriven )
265+ addLayer (p .astPreserveFilter , LayerASTPreserve )
266+ addLayer (p .contrastiveFilter , LayerContrastive )
267+ addLayer (p .ngramAbbreviator , LayerNgram )
268+ addLayer (p .evaluatorHeadsFilter , LayerEvaluator )
269+ addLayer (p .gistFilter , LayerGist )
270+ addLayer (p .hierarchicalSummaryFilter , LayerHierarchical )
271+ addLayer (p .compactionLayer , LayerCompaction )
272+ addLayer (p .attributionFilter , LayerAttribution )
273+ addLayer (p .h2oFilter , LayerH2O )
274+ addLayer (p .attentionSinkFilter , LayerAttentionSink )
275+ addLayer (p .metaTokenFilter , LayerMetaToken )
276+ addLayer (p .semanticChunkFilter , LayerSemanticChunk )
277+ addLayer (p .sketchStoreFilter , LayerSemanticCache )
278+ addLayer (p .lazyPrunerFilter , LayerLazyPruner )
279+ addLayer (p .semanticAnchorFilter , LayerSemanticAnchor )
280+ addLayer (p .agentMemoryFilter , LayerAgentMemory )
270281 // Unified layers
271- p . layers = append (p .layers , filterLayer { p . edgeCaseFilter , LayerEdgeCase } )
272- p . layers = append (p .layers , filterLayer { p . reasoningFilter , LayerReasoning } )
273- p . layers = append (p .layers , filterLayer { p . advancedFilter , LayerAdvanced } )
282+ addLayer (p .edgeCaseFilter , LayerEdgeCase )
283+ addLayer (p .reasoningFilter , LayerReasoning )
284+ addLayer (p .advancedFilter , LayerAdvanced )
274285}
275286
276287// applyTierDefaults applies tier-based layer enablement if UseTiers is set.
0 commit comments