Coverage for src/qdrant_loader_mcp_server/search/hybrid/components/facets.py: 72%

18 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-09-08 06:06 +0000

1from __future__ import annotations 

2 

3from collections.abc import Sequence 

4from typing import TYPE_CHECKING, Any 

5 

6if TYPE_CHECKING: 

7 from ...components.models import HybridSearchResult 

8 

9 

10def suggest_refinements( 

11 engine: Any, results: Sequence[HybridSearchResult], filters: list 

12) -> list[dict[str, Any]]: 

13 """Delegate to FacetedSearchEngine.suggest_refinements.""" 

14 # Runtime validation to provide immediate, actionable errors 

15 if not hasattr(engine, "suggest_refinements"): 

16 raise AttributeError( 

17 "Engine is missing required method 'suggest_refinements(results, filters)'." 

18 ) 

19 if not callable(engine.suggest_refinements): 

20 raise TypeError("Engine.suggest_refinements must be callable.") 

21 

22 return engine.suggest_refinements(results, filters) 

23 

24 

25def generate_facets(engine: Any, results: Sequence[HybridSearchResult]) -> list: 

26 """Delegate to facet generator to produce facets for results.""" 

27 # Runtime validation to ensure facet generator capability exists 

28 if not hasattr(engine, "facet_generator"): 

29 raise AttributeError("Engine is missing required attribute 'facet_generator'.") 

30 facet_generator = engine.facet_generator 

31 if not hasattr(facet_generator, "generate_facets"): 

32 raise AttributeError( 

33 "Engine.facet_generator is missing required method 'generate_facets(results)'." 

34 ) 

35 if not callable(facet_generator.generate_facets): 

36 raise TypeError("Engine.facet_generator.generate_facets must be callable.") 

37 

38 return facet_generator.generate_facets(results)