Ë
    uPêjd  ã                   ó’   — d Z ddlmZmZ ddlZddlmZ ddlm	Z	m
Z
mZ ddlmZ  G d„ de«      Z G d	„ d
ed¬«      Z G d„ de	«      Zy)z�
Calls Tavily's /search endpoint to search the web.

Tavily API Reference: https://docs.tavily.com/documentation/api-reference/endpoint/search
é    )ÚFinalÚ	TypedDictN)ÚLogging)ÚBaseSearchConfigÚSearchResponseÚSearchResult)Úget_secret_strc                   ó   — e Zd ZU dZeed<   y)Ú_TavilySearchRequestRequiredz.Required fields for Tavily Search API request.ÚqueryN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__© ó    ún/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/tavily/search/transformation.pyr   r      s
   … Ù8à„Jr   r   c                   ó¶   — e Zd ZU dZeed<   ee   ed<   ee   ed<   eed<   eed<   eez  ed<   eez  ed<   eed	<   eed
<   eed<   eed<   eed<   eed<   eed<   y)ÚTavilySearchRequestz}
    Tavily Search API request format.
    Based on: https://docs.tavily.com/documentation/api-reference/endpoint/search
    Úmax_resultsÚinclude_domainsÚexclude_domainsÚtopicÚsearch_depthÚinclude_answerÚinclude_raw_contentÚinclude_imagesÚinclude_image_descriptionsÚinclude_faviconÚ
time_rangeÚ
start_dateÚend_dateÚcountryN)	r   r   r   r   Úintr   Úlistr   Úboolr   r   r   r   r      sh   … ñð
 ÓØ˜#‘YÓØ˜#‘YÓØƒJØÓØ˜3‘JÓØ ™Ó#ØÓØ $Ó$ØÓØƒOØƒOØƒMØ„Lr   r   F)Útotalc            	       óÌ   — e Zd ZdZedefd„«       Z	 	 ddededz  dedz  defd„Z	 ddedz  d	ed
ee	e   z  dz  defd„Z
dee	e   z  d	edefd„Zdej                  dedefd„Zy)ÚTavilySearchConfigzhttps://api.tavily.comÚreturnc                   ó   — y)NÚTavilyr   r   r   r   Úui_friendly_namez#TavilySearchConfig.ui_friendly_name3   s   € àr   NÚheadersÚapi_keyÚapi_basec                 óz   — | j                  ||dd| j                  ¬«      }|st        d«      ‚d|› �|d<   d|d<   |S )	z:
        Validate environment and return headers.
        )ÚTAVILY_API_KEYÚTAVILY_API_BASE)Úcaller_api_keyÚcaller_api_baseÚkey_env_varsÚbase_env_varÚdefault_api_basezETAVILY_API_KEY is not set. Set `TAVILY_API_KEY` environment variable.zBearer ÚAuthorizationzapplication/jsonzContent-Type)Úresolve_server_api_keyr5   Ú
ValueError)Úselfr0   r1   r2   Úkwargss        r   Úvalidate_environmentz'TavilySearchConfig.validate_environment7   s_   € ð ×-Ñ-Ø"Ø$Ø,Ø*Ø!×1Ñ1ð .ó 
ˆñ ÜÐdÓeÐeØ%,¨W¨IÐ#6ˆ�Ñ Ø"4ˆ�ÑØˆr   Úoptional_paramsÚdatac                 ól   — |xs t        d«      xs | j                  }|j                  d«      s|› d�}|S )z7
        Get complete URL for Search endpoint.
        r5   z/search)r	   r5   Úendswith)r>   r2   rA   rB   r?   s        r   Úget_complete_urlz#TavilySearchConfig.get_complete_urlN   s@   € ð ÒXœ~Ð.?Ó@ÒXÀD×DXÑDXˆð × Ñ  Ô+Ø"˜ 7Ð+ˆHàˆr   r   c                 ó4  — t        |t        «      rdj                  |«      }d|i}d|v r|d   |d<   d|v r|d   |d<   d|v r|d   j                  «       |d<   t	        |«      }|j                  «       D ]"  \  }}|| j                  «       vsŒ||vsŒ|||<   Œ$ |S )a‹  
        Transform Search request to Tavily API format.

        Args:
            query: Search query (string or list of strings). Tavily only supports single string queries.
            optional_params: Optional parameters for the request
                - max_results: Maximum number of search results (0-20)
                - search_domain_filter: List of domains to include (max 300) -> maps to `include_domains`
                - exclude_domains: List of domains to exclude (max 150)
                - topic: Category of search ('general', 'news', 'finance')
                - search_depth: Depth of search ('basic', 'advanced')
                - include_answer: Include LLM-generated answer (bool or 'basic', 'advanced')
                - include_raw_content: Include raw HTML content (bool or 'markdown', 'text')
                - include_images: Perform image search (bool)
                - include_image_descriptions: Add descriptions for images (bool)
                - include_favicon: Include favicon URL (bool)
                - time_range: Time range filter ('day', 'week', 'month', 'year', 'd', 'w', 'm', 'y')
                - start_date: Start date filter (YYYY-MM-DD)
                - end_date: End date filter (YYYY-MM-DD)
                - country: Country code filter (e.g., 'US', 'GB', 'DE')

        Returns:
            Dict with typed request data following TavilySearchRequest spec
        ú r   r   Úsearch_domain_filterr   r%   )Ú
isinstancer'   ÚjoinÚlowerÚdictÚitemsÚ(get_supported_perplexity_optional_params)r>   r   rA   r?   Úrequest_dataÚresult_dataÚparamÚvalues           r   Útransform_search_requestz+TavilySearchConfig.transform_search_request`   sÑ   € ô< �eœTÔ"à—H‘H˜U“OˆEð �Uð4
ˆð
 ˜OÑ+Ø*9¸-Ñ*HˆL˜Ñ'à! _Ñ4Ø.=Ð>TÑ.UˆLÐ*Ñ+à˜Ñ'à&5°iÑ&@×&FÑ&FÓ&HˆL˜Ñ#ô " ,Ó/ˆð ,×1Ñ1Ó3ò 	+‰LˆE�5Ø˜D×IÑIÓKÒKÐPUÐ]hÒPhØ%*�˜EÒ"ð	+ð Ðr   Úraw_responseÚlogging_objc           	      ó  — |j                  «       }g }|j                  dg «      D ]S  }t        |j                  dd«      |j                  dd«      |j                  dd«      dd¬«      }|j                  |«       ŒU t	        |d¬	«      S )
u   
        Transform Tavily API response to LiteLLM unified SearchResponse format.

        Tavily â†’ LiteLLM mappings:
        - results[].title â†’ SearchResult.title
        - results[].url â†’ SearchResult.url
        - results[].content â†’ SearchResult.snippet
        - No date/last_updated fields in Tavily response (set to None)

        Args:
            raw_response: Raw httpx response from Tavily API
            logging_obj: Logging object for tracking

        Returns:
            SearchResponse with standardized format
        ÚresultsÚtitleÚ ÚurlÚcontentN)rX   rZ   ÚsnippetÚdateÚlast_updatedÚsearch)rW   Úobject)ÚjsonÚgetr   Úappendr   )r>   rT   rU   r?   Úresponse_jsonrW   ÚresultÚsearch_results           r   Útransform_search_responsez,TavilySearchConfig.transform_search_response›   s’   € ð,  ,×0Ñ0Ó2ˆð ˆØ#×'Ñ'¨	°2Ó6ò 	*ˆFÜ(Ø—j‘j ¨"Ó-Ø—J‘J˜u bÓ)ØŸ
™
 9¨bÓ1ØØ!ôˆMð �N‰N˜=Õ)ð	*ô ØØô
ð 	
r   )NN)N)r   r   r   r5   Ústaticmethodr   r/   rL   r@   r'   rE   rS   ÚhttpxÚResponseÚLiteLLMLoggingObjr   rg   r   r   r   r+   r+   0   sì   „ Ø.€Oàð˜cò ó ðð #Ø#ñ	àðð �t‘ðð ˜‘*ð	ð 
óð6 *.ñ	à˜‘*ðð ðð �T˜$‘ZÑ $Ñ&ð	ð 
óð$9à�T˜#‘Y‰ð9ð ð9ð
 
ó9ðv'
à—n‘nð'
ð 'ð'
ð
 
ô'
r   r+   )r   Útypingr   r   ri   Ú*litellm.litellm_core_utils.litellm_loggingr   rk   Ú+litellm.llms.base_llm.search.transformationr   r   r   Úlitellm.secret_managers.mainr	   r   r   r+   r   r   r   ú<module>rp      sN   ðñ÷ $ã å S÷ñ õ
 8ô 9ô ôÐ6¸eõ ô,R
Ð)õ R
r   