Source code for haive.core.engine.retriever.providers.TavilySearchAPIRetrieverConfig
"""Tavily Search API Retriever implementation for the Haive framework.from typing import AnyThis module provides a configuration class for the Tavily Search API retriever, whichretrieves web search results using the Tavily search API service.The TavilySearchAPIRetriever works by:1. Taking a search query2. Sending it to the Tavily Search API3. Returning web search results as documentsThis retriever is particularly useful when:- Need access to current web information- Building applications that require real-time search- Combining web search with other retrieval methods- Providing up-to-date information beyond training dataThe implementation integrates with LangChain's TavilySearchAPIRetriever while providinga consistent Haive configuration interface with secure API key management."""fromtypingimportAnyfromlangchain_core.documentsimportDocumentfrompydanticimportField,SecretStrfromhaive.core.common.mixins.secure_configimportSecureConfigMixinfromhaive.core.engine.retriever.retrieverimportBaseRetrieverConfigfromhaive.core.engine.retriever.typesimportRetrieverType
[docs]@BaseRetrieverConfig.register(RetrieverType.TAVILY_SEARCH_API)classTavilySearchAPIRetrieverConfig(SecureConfigMixin,BaseRetrieverConfig):"""Configuration for Tavily Search API retriever in the Haive framework. This retriever searches the web using the Tavily Search API and returns web search results as documents. It requires a Tavily API key. Attributes: retriever_type (RetrieverType): The type of retriever (always TAVILY_SEARCH_API). api_key (Optional[SecretStr]): Tavily API key (auto-resolved from TAVILY_API_KEY env var). k (int): Maximum number of search results to retrieve (default: 10). include_domains (Optional[List[str]]): Domains to include in search. exclude_domains (Optional[List[str]]): Domains to exclude from search. include_answer (bool): Whether to include answer in results (default: False). include_raw_content (bool): Whether to include raw content (default: False). Examples: >>> from haive.core.engine.retriever import TavilySearchAPIRetrieverConfig >>> >>> # Create the tavily search retriever config >>> config = TavilySearchAPIRetrieverConfig( ... name="tavily_retriever", ... k=5, ... include_answer=True, ... exclude_domains=["example.com"] ... ) >>> >>> # Instantiate and use the retriever >>> retriever = config.instantiate() >>> docs = retriever.get_relevant_documents("latest AI developments 2024") """retriever_type:RetrieverType=Field(default=RetrieverType.TAVILY_SEARCH_API,description="The type of retriever")# API configuration with SecureConfigMixinapi_key:SecretStr|None=Field(default=None,description="Tavily API key (auto-resolved from TAVILY_API_KEY)")# Provider for SecureConfigMixinprovider:str=Field(default="tavily",description="Provider name for API key resolution")# Search configurationk:int=Field(default=10,ge=1,le=100,description="Maximum number of search results to retrieve",)include_domains:list[str]|None=Field(default=None,description="List of domains to include in search results")exclude_domains:list[str]|None=Field(default=None,description="List of domains to exclude from search results")include_answer:bool=Field(default=False,description="Whether to include answer in search results")include_raw_content:bool=Field(default=False,description="Whether to include raw content from web pages")
[docs]defget_input_fields(self)->dict[str,tuple[type,Any]]:"""Return input field definitions for Tavily Search API retriever."""return{"query":(str,Field(description="Web search query")),}
[docs]defget_output_fields(self)->dict[str,tuple[type,Any]]:"""Return output field definitions for Tavily Search API retriever."""return{"documents":(list[Document],Field(default_factory=list,description="Web search results from Tavily"),),}
[docs]definstantiate(self)->Any:"""Create a Tavily Search API retriever from this configuration. Returns: TavilySearchAPIRetriever: Instantiated retriever ready for web search. Raises: ImportError: If required packages are not available. ValueError: If API key is not available. """try:fromlangchain_community.retrieversimportTavilySearchAPIRetrieverexceptImportError:raiseImportError("TavilySearchAPIRetriever requires tavily-python package. ""Install with: pip install tavily-python")# Get API key using SecureConfigMixinapi_key=self.get_api_key()ifnotapi_key:raiseValueError("Tavily API key is required. Set TAVILY_API_KEY environment variable ""or provide api_key parameter.")# Prepare configurationconfig={"api_key":api_key,"k":self.k,"include_answer":self.include_answer,"include_raw_content":self.include_raw_content,}ifself.include_domains:config["include_domains"]=self.include_domainsifself.exclude_domains:config["exclude_domains"]=self.exclude_domainsreturnTavilySearchAPIRetriever(**config)