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
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 07:19 +0800
1"""Utility functions for HyDE."""
3from __future__ import annotations
5from typing import Any
7from lexigram.ai.rag.hyde.protocols import EmbeddingClientProtocol
8from lexigram.ai.rag.hyde.types import HyDEResult, HyDEStrategy
9from lexigram.contracts import (
10 LLMClientProtocol,
11)
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.
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
33 Returns:
34 HyDE result
36 Raises:
37 ValueError: If strategy is unknown or required client missing
38 """
39 from lexigram.ai.rag.hyde.strategy_registry import HyDEStrategyRegistry
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 )