Ë
    uPêj­  ã                   ó’   — 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)z8
Calls Perplexity's /search endpoint to search the web.
é    )ÚFinalÚ	TypedDictN)ÚLogging)ÚBaseSearchConfigÚSearchResponseÚSearchResult)Úget_secret_strc                   ó(   — e Zd ZU dZeee   z  ed<   y)Ú _PerplexitySearchRequestRequiredz2Required fields for Perplexity Search API request.ÚqueryN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚlistÚ__annotations__© ó    úr/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/perplexity/search/transformation.pyr   r      s   … Ù<à��c‘‰?Ôr   r   c                   ó@   — e Zd ZU dZeed<   ee   ed<   eed<   eed<   y)ÚPerplexitySearchRequestzr
    Perplexity Search API request format.
    Based on: https://docs.perplexity.ai/api-reference/search-post
    Úmax_resultsÚsearch_domain_filterÚmax_tokens_per_pageÚcountryN)r   r   r   r   Úintr   r   r   r   r   r   r   r      s$   … ñð
 ÓØ˜s™)Ó#ØÓØ„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)ÚPerplexitySearchConfigzhttps://api.perplexity.aiÚreturnc                   ó   — y)NÚ
Perplexityr   r   r   r   Úui_friendly_namez'PerplexitySearchConfig.ui_friendly_name'   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.
        )ÚPERPLEXITYAI_API_KEYÚPERPLEXITY_API_BASE)Úcaller_api_keyÚcaller_api_baseÚkey_env_varsÚbase_env_varÚdefault_api_basezQPERPLEXITYAI_API_KEY is not set. Set `PERPLEXITYAI_API_KEY` environment variable.zBearer ÚAuthorizationzapplication/jsonzContent-Type)Úresolve_server_api_keyr*   Ú
ValueError)Úselfr%   r&   r'   Úkwargss        r   Úvalidate_environmentz+PerplexitySearchConfig.validate_environment+   s_   € ð ×-Ñ-Ø"Ø$Ø2Ø.Ø!×5Ñ5ð .ó 
ˆñ ÜÐpÓqÐqØ%,¨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.
        r*   z/search)r	   r*   Úendswith)r3   r'   r6   r7   r4   s        r   Úget_complete_urlz'PerplexitySearchConfig.get_complete_urlB   s@   € ð Ò`œ~Ð.CÓDÒ`È×H`ÑH`ˆð × Ñ  Ô+Ø"˜ 7Ð+ˆHàˆr   r   c                 óà   — d|i}|j                  d«      }|�||d<   |j                  d«      }|�||d<   |j                  d«      }|�||d<   |j                  d«      }|�||d<   t        |«      S )a  
        Transform Search request to Perplexity API format.

        Note: LiteLLM's native spec is the perplexity search spec.

        There's no transformation needed for the request data.

        https://docs.perplexity.ai/api-reference/search-post

        Args:
            query: Search query (string or list of strings)
            optional_params: Optional parameters for the request
                - max_results: Maximum number of search results (1-20)
                - search_domain_filter: List of domains to filter (max 20)
                - max_tokens_per_page: Max tokens per page (default 1024)
                - country: Country code filter (e.g., 'US', 'GB', 'DE')

        Returns:
            Dict with typed request data following PerplexitySearchRequest spec
        r   r   r   r   r   )ÚgetÚdict)	r3   r   r6   r4   Úrequest_datar   r   r   r   s	            r   Útransform_search_requestz/PerplexitySearchConfig.transform_search_requestT   s£   € ð6 �Uð8
ˆð
 -×0Ñ0°Ó?ˆØÐ"Ø*5ˆL˜Ñ'à&5×&9Ñ&9Ð:PÓ&QÐØÐ+Ø3GˆLÐ/Ñ0à%4×%8Ñ%8Ð9NÓ%OÐØÐ*Ø2EˆLÐ.Ñ/à(×,Ñ,¨YÓ7ˆØÐØ&-ˆL˜Ñ#ä�LÓ!Ð!r   Úraw_responseÚlogging_objc           
      óL  — |j                  «       }g }|j                  dg «      D ]q  }t        |j                  dd«      |j                  dd«      |j                  dd«      |j                  d«      |j                  d«      ¬«      }|j                  |«       Œs t	        |d	¬
«      S )a!  
        Transform Perplexity API response to standard SearchResponse format.

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

        Returns:
            SearchResponse with standardized format
        ÚresultsÚtitleÚ ÚurlÚsnippetÚdateÚlast_updated)rD   rF   rG   rH   rI   Úsearch)rC   Úobject)Újsonr<   r   Úappendr   )r3   r@   rA   r4   Úresponse_jsonrC   ÚresultÚsearch_results           r   Útransform_search_responsez0PerplexitySearchConfig.transform_search_response…   s¤   € ð   ,×0Ñ0Ó2ˆð ˆØ#×'Ñ'¨	°2Ó6ò 	*ˆFÜ(Ø—j‘j ¨"Ó-Ø—J‘J˜u bÓ)ØŸ
™
 9¨bÓ1Ø—Z‘Z Ó'Ø#ŸZ™Z¨Ó7ôˆMð �N‰N˜=Õ)ð	*ô ØØô
ð 	
r   )NN)N)r   r   r   r*   Ústaticmethodr   r$   r=   r5   r   r:   r?   ÚhttpxÚResponseÚLiteLLMLoggingObjr   rQ   r   r   r   r    r    $   sí   „ Ø5Ðàð˜cò ó ðð #Ø#ñ	àðð �t‘ðð ˜‘*ð	ð 
óð6 *.ñ	à˜‘*ðð ðð �T˜$‘ZÑ $Ñ&ð	ð 
óð$/"à�T˜#‘Y‰ð/"ð ð/"ð
 
ó/"ðb!
à—n‘nð!
ð 'ð!
ð
 
ô!
r   r    )r   Útypingr   r   rS   Ú*litellm.litellm_core_utils.litellm_loggingr   rU   Ú+litellm.llms.base_llm.search.transformationr   r   r   Úlitellm.secret_managers.mainr	   r   r   r    r   r   r   ú<module>rZ      sN   ðñ÷ $ã å S÷ñ õ
 8ô yô ô	Ð>Àeõ 	ôB
Ð-õ B
r   