Coverage for /home/admin/Documents/AI/applications/lexigram-dev/lexigram/experimental/ai/lexigram-ai-rag/src/lexigram/ai/rag/hyde/utils.py: 100%

9 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-25 07:19 +0800

1"""Utility functions for HyDE.""" 

2 

3from __future__ import annotations 

4 

5from typing import Any 

6 

7from lexigram.ai.rag.hyde.protocols import EmbeddingClientProtocol 

8from lexigram.ai.rag.hyde.types import HyDEResult, HyDEStrategy 

9from lexigram.contracts import ( 

10 LLMClientProtocol, 

11) 

12 

13 

14# Convenience function 

15async def generate_hyde( 

16 query: str, 

17 llm_client: LLMClientProtocol, 

18 embedding_client: EmbeddingClientProtocol | None = None, 

19 strategy: HyDEStrategy = HyDEStrategy.SINGLE, 

20 num_documents: int | None = None, 

21 **kwargs: Any, 

22) -> HyDEResult: 

23 """Generate hypothetical documents for query. 

24 

25 Args: 

26 query: User query 

27 llm_client: Client for generating hypothetical documents 

28 embedding_client: Optional client for generating embeddings 

29 strategy: HyDE strategy to use 

30 num_documents: Number of documents to generate 

31 **kwargs: Additional parameters 

32 

33 Returns: 

34 HyDE result 

35 

36 Raises: 

37 ValueError: If strategy is unknown or required client missing 

38 """ 

39 from lexigram.ai.rag.hyde.strategy_registry import HyDEStrategyRegistry 

40 

41 registry = HyDEStrategyRegistry.with_defaults() 

42 return await registry.generate( 

43 strategy, 

44 llm_client, 

45 embedding_client, # type: ignore[arg-type] 

46 query, 

47 num_documents if num_documents is not None else 1, 

48 kwargs, 

49 )