Ë
    uPêj;"  ã                   ó  — U d Z ddlmZmZmZmZ ddlmZ ddlZddl	m
Z
 ddlmZ ddlmZ ddlmZ erdd	lmZ neZ ed
«      Zeee      ed<   dedefd„Zdededz  dedz  defd„Z G d„ de«      Z G d„ de«      Z G d„ d«      Zy)z+
Base Search transformation configuration.
é    )ÚTYPE_CHECKINGÚAnyÚFinalÚLiteral)ÚurlsplitN)ÚPrivateAttr©ÚBaseLLMException©Úget_secret_str)ÚLiteLLMPydanticObjectBase)ÚLogging)Úmax_resultsÚsearch_domain_filterÚcountryÚmax_tokens_per_pageÚ_PERPLEXITY_UNIFIED_PARAMSÚurlÚreturnc                 óH   — t        | «      j                  j                  «       S ©N)r   ÚnetlocÚlower)r   s    úp/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/base_llm/search/transformation.pyÚ_search_hostr      s   € Ü�C‹=×Ñ×%Ñ%Ó'Ð'ó    Úcaller_api_baseÚdefault_api_baseÚbase_env_varc                 ó‚   — t        | «      }|sy||rt        |«      nd fD �ch c]  }|rt        |«      ’Œ }}||v S c c}w )NF)r   r   )r   r   r   Ú	candidateÚbaseÚtrusteds         r   Ú_is_trusted_search_api_baser$   #   s`   € ô
 $ OÓ4€IÙØð Ù,8ŒN˜<Ô(¸dð
öàñ ô 	�TÕð€Gð ð ˜ÐÐùòs   ¢<c                   ó`   — e Zd ZU dZeed<   eed<   eed<   dZedz  ed<   dZedz  ed<   dd	iZy)
ÚSearchResultzSingle search result.Útitler   ÚsnippetNÚdateÚlast_updatedÚextraÚallow)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__r)   r*   Úmodel_config© r   r   r&   r&   6   s:   … ÙàƒJØ	ƒHØƒLØ€Dˆ#�‰*ÓØ#€L�#˜‘*Ó#à˜WÐ%�Lr   r&   c                   óT   — e Zd ZU dZee   ed<   dZeed<   ddiZ	 e
e¬«      Zeed<   y	)
ÚSearchResponsezŠ
    Standard Search response format.
    Standardized to Perplexity Search format - other providers should transform to this format.
    ÚresultsÚsearchÚobjectr+   r,   )Údefault_factoryÚ_hidden_paramsN)r-   r.   r/   r0   Úlistr&   r2   r9   r1   r3   r   Údictr;   r4   r   r   r6   r6   B   s9   … ñð
 �,ÑÓØ€FˆCÓà˜WÐ%€Lñ '°tÔ<€N�DÔ<r   r6   c                   ó  — e Zd ZdZd#d„Zedefd„«       Zded   fd„Z	ede
e   fd„«       Zd	edz  d
edz  dedz  deddf
d„Zdedz  d	edz  deedf   dedz  d
edz  dedz  fd„Z	 	 d$dededz  dedz  defd„Z	 d%deeef   deeef   deeef   eeeef      z  dededz  deeeef   edz  f   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ee   z  fd„Zdej0                  dedefd„Zd ed!ededefd"„Zy)&ÚBaseSearchConfigzi
    Base configuration for Search transformations.
    Handles provider-agnostic Search operations.
    r   Nc                  ó   — y r   r4   ©Úselfs    r   Ú__init__zBaseSearchConfig.__init__W   s   € Ør   c                   ó   — y)zr
        UI-friendly name for the search provider.
        Override in provider-specific implementations.
        zUnknown Search Providerr4   r4   r   r   Úui_friendly_namez!BaseSearchConfig.ui_friendly_nameZ   s   € ð )r   )ÚGETÚPOSTc                  ó   — y)zÇ
        Get HTTP method for search requests.
        Override in provider-specific implementations if needed.

        Returns:
            HTTP method ('GET' or 'POST'). Default is 'POST'.
        rG   r4   rA   s    r   Úget_http_methodz BaseSearchConfig.get_http_methodb   s   € ð r   c                  ó   — t         S )zí
        Get the set of Perplexity unified search parameters.
        These are the standard parameters that providers should transform from.

        Returns:
            Set of parameter names that are part of the unified spec
        )r   r4   r   r   Ú(get_supported_perplexity_optional_paramsz9BaseSearchConfig.get_supported_perplexity_optional_paramsl   s
   € ô *Ð)r   r   r   r   Úcredential_namec                 óH   — |syt        |||«      ryt        d|› d|› d�«      ‚)a£  
        Block sending a server-managed credential to a caller-chosen host.

        A caller-supplied api_base is honored when constructing the request URL, so
        falling back to a server-configured secret while the caller controls the host
        leaks that secret. The provider default and the operator's own api_base
        override are the only trusted destinations for a server-managed credential.
        Nz'Refusing to send the server-configured z" to the caller-supplied api_base 'zN'. Pass an explicit api_key when overriding api_base for this search provider.)r$   Ú
ValueError)rB   r   r   r   rL   s        r   Ú._assert_trusted_api_base_for_server_credentialz?BaseSearchConfig._assert_trusted_api_base_for_server_credentialw   sG   € ñ ØÜ& Ð8HÈ,ÔWØÜØ5°oÐ5Fð G)Ø)8Ð(9ð :AðBó
ð 	
r   Úcaller_api_keyÚkey_env_vars.c                óv   — |r|S t        d„ d„ |D «       D «       d«      }|€y| j                  ||||d   «       |S )a1  
        Resolve a single-secret search API key, falling back to a server-managed
        secret only when the request targets a trusted host.

        Returns the caller's key when provided, otherwise the first set
        server-managed secret (or None when none is set, for keyless providers).
        c              3   ó&   K  — | ]	  }|sŒ|–— Œ y ­wr   r4   )Ú.0Úkeys     r   ú	<genexpr>z:BaseSearchConfig.resolve_server_api_key.<locals>.<genexpr>£   s   è ø€ ÒQ�SÊSŒSÑQùs   ‚Šc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   r   )rT   Úvars     r   rV   z:BaseSearchConfig.resolve_server_api_key.<locals>.<genexpr>£   s   è ø€ ÒI°Sœ^¨C×0ÑIùs   ‚Nr   )ÚnextrO   )rB   rP   r   rQ   r   r   Ú
server_keys          r   Úresolve_server_api_keyz'BaseSearchConfig.resolve_server_api_key�   sW   € ñ  Ø!Ð!Ü ÙQÑI¸LÔIÔQØó
ˆ
ð ÐØØ×;Ñ;ØÐ-¨|¸\È!¹_ô	
ð Ðr   ÚheadersÚapi_keyÚapi_basec                 ó   — |S )zq
        Validate environment and return headers.
        Override in provider-specific implementations.
        r4   )rB   r\   r]   r^   Úkwargss        r   Úvalidate_environmentz%BaseSearchConfig.validate_environment­   s	   € ð ˆr   Úoptional_paramsÚrequest_datac                 ó
   — |dfS )uá  
        OPTIONAL

        Sign the request. Providers like Bedrock AgentCore need to SigV4-sign
        the request before sending it to the API.

        For all other providers, this is a no-op and we just return the headers.

        Returns:
            Tuple of (headers, signed_json_body). When signed_json_body is not
            None, the handler MUST send it verbatim as the request body â€”
            re-serializing the payload would invalidate the signature.
        Nr4   )rB   r\   rb   rc   r^   r]   s         r   Úsign_requestzBaseSearchConfig.sign_requestº   s   € ð* ˜ˆ}Ðr   Údatac                 ó   — t        d«      ‚)a¡  
        Get complete URL for Search endpoint.

        Args:
            api_base: Base URL for the API
            optional_params: Optional parameters for the request
            data: Transformed request body from transform_search_request().
                  Some providers (e.g., Google PSE) use GET requests and need
                  the request body to construct query parameters in the URL.
                  Can be a dict or list of dicts depending on provider.
            **kwargs: Additional keyword arguments

        Returns:
            Complete URL for the search endpoint

        Note:
            Override in provider-specific implementations.
        z0get_complete_url must be implemented by provider©ÚNotImplementedError)rB   r^   rb   rf   r`   s        r   Úget_complete_urlz!BaseSearchConfig.get_complete_urlÑ   s   € ô2 "Ð"TÓUÐUr   Úqueryc                 ó   — t        d«      ‚)a?  
        Transform Search request to provider-specific format.
        Override in provider-specific implementations.

        Args:
            query: Search query (string or list of strings)
            optional_params: Optional parameters for the request

        Returns:
            Dict with request data
        z8transform_search_request must be implemented by providerrh   )rB   rk   rb   r`   s       r   Útransform_search_requestz)BaseSearchConfig.transform_search_requestì   s   € ô" "Ð"\Ó]Ð]r   Úraw_responseÚlogging_objc                 ó   — t        d«      ‚)zˆ
        Transform provider-specific Search response to standard format.
        Override in provider-specific implementations.
        z9transform_search_response must be implemented by providerrh   )rB   rn   ro   r`   s       r   Útransform_search_responsez*BaseSearchConfig.transform_search_responseÿ   s   € ô "Ð"]Ó^Ð^r   Úerror_messageÚstatus_codec                 ó   — t        |||¬«      S )z-Get appropriate error class for the provider.)rs   Úmessager\   r	   )rB   rr   rs   r\   s       r   Úget_error_classz BaseSearchConfig.get_error_class  s   € ô  Ø#Ø!Øô
ð 	
r   )r   N)NNr   )r-   r.   r/   r0   rC   Ústaticmethodr1   rE   r   rI   Ú	frozensetrK   rO   Útupler[   r=   ra   r9   r<   Úbytesre   rj   rm   ÚhttpxÚResponseÚLiteLLMLoggingObjr6   rq   ÚintÚ	Exceptionrv   r4   r   r   r?   r?   Q   s�  „ ñó
ð ð)˜cò )ó ð)ð ¨Ñ!7ó ð ð*°iÀ±nò *ó ð*ð
à˜t™ð
ð  ™*ð
ð ˜D‘jð	
ð
 ð
ð 
ó
ð2ð ˜d™
ðð ˜t™ð	ð
 ˜C ˜H‘oðð ˜D‘jðð  ™*ðð 
ˆt‰óð@ #Ø#ñ	àðð �t‘ðð ˜‘*ð	ð 
óð& #ñà�c˜3�h‘ðð ˜c 6˜kÑ*ðð ˜3 ˜;Ñ'¨$¨t°C¸°KÑ/@Ñ*AÑAð	ð
 ðð �t‘ðð 
ˆt�C˜�H‰~˜u t™|Ð+Ñ	,óð6 *.ñ	Và˜‘*ðVð ðVð �T˜$‘ZÑ $Ñ&ð	Vð 
óVð6^à�T˜#‘Y‰ð^ð ð^ð
 
��T‘
Ñ	ó^ð&
_à—n‘nð
_ð 'ð
_ð
 
ó
_ð
àð
ð ð
ð ð	
ð
 
ô
r   r?   )r0   Útypingr   r   r   r   Úurllib.parser   r{   Úpydanticr   Ú)litellm.llms.base_llm.chat.transformationr
   Úlitellm.secret_managers.mainr   Úlitellm.types.llms.baser   Ú*litellm.litellm_core_utils.litellm_loggingr   r}   rx   r   r1   r2   r   Úboolr$   r&   r6   r?   r4   r   r   ú<module>rˆ      s¼   ðò÷ 6Ó 5Ý !ã Ý  å FÝ 7Ý =áÞWàÐñ 5>ðó5Ð ˜E )¨C¡.Ñ1ó ð(�cð (˜có (ð Øð à˜D‘jð ð ˜‘*ð ð 
ó	 ô&	&Ð,ô 	&ô=Ð.ô =÷E
ò E
r   