Ë
    uPêjó  ã                   óà   — U 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d	¬
«      Z G d„ ded	¬
«      Z G d„ ded	¬
«      Z G d„ ded	¬
«      ZdddœZeed<    G d„ de	«      Zy)z�
Calls Parallel AI's /v1/search endpoint to search the web.

Parallel AI API Reference: https://docs.parallel.ai/api-reference/search/search
é    )ÚFinalÚ	TypedDictN)ÚLogging)ÚBaseSearchConfigÚSearchResponseÚSearchResult)Úget_secret_strc                   ó8   — e Zd ZU ee   ed<   ee   ed<   eed<   y)Ú_ParallelAISourcePolicyÚinclude_domainsÚexclude_domainsÚ
after_dateN)Ú__name__Ú
__module__Ú__qualname__ÚlistÚstrÚ__annotations__© ó    ús/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/parallel_ai/search/transformation.pyr   r      s   … Ø˜#‘YÓØ˜#‘YÓØ„Or   r   F)Útotalc                   ó   — e Zd ZU eed<   y)Ú_ParallelAIExcerptSettingsÚmax_chars_per_resultN)r   r   r   Úintr   r   r   r   r   r      s   … ØÔr   r   c                   ó@   — e Zd ZU eed<   eed<   eed<   eed<   eed<   y)Ú_ParallelAIAdvancedSettingsÚsource_policyÚexcerpt_settingsÚfetch_policyÚlocationÚmax_resultsN)	r   r   r   r   r   r   Údictr   r   r   r   r   r   r      s   … Ø*Ó*Ø0Ó0ØÓØƒMØÔr   r   c                   ó^   — e Zd ZU dZee   ed<   eed<   eed<   eed<   eed<   eed<   eed<   y	)
ÚParallelAISearchRequestzv
    Parallel AI v1 Search API request format.
    Based on: https://docs.parallel.ai/api-reference/search/search
    Úsearch_queriesÚ	objectiveÚmodeÚmax_chars_totalÚ
session_idÚclient_modelÚadvanced_settingsN)	r   r   r   Ú__doc__r   r   r   r   r   r   r   r   r&   r&   &   s4   … ñð
 ˜‘IÓØƒNØ
ƒIØÓØƒOØÓØ2Ô2r   r&   ÚbasicÚadvanced)ÚbaseÚproÚLEGACY_PROCESSOR_TO_MODEc            	       óÌ   — 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)ÚParallelAISearchConfigzhttps://api.parallel.aiÚreturnc                   ó   — y)NzParallel AIr   r   r   r   Úui_friendly_namez'ParallelAISearchConfig.ui_friendly_name;   s   € àr   NÚheadersÚapi_keyÚapi_basec                 ót   — | j                  ||dd| j                  ¬«      }|st        d«      ‚||d<   d|d<   |S )N)ÚPARALLEL_AI_API_KEYÚPARALLEL_API_KEYÚPARALLEL_AI_API_BASE)Úcaller_api_keyÚcaller_api_baseÚkey_env_varsÚbase_env_varÚdefault_api_basezIPARALLEL_API_KEY is not set. Set `PARALLEL_API_KEY` environment variable.z	x-api-keyzapplication/jsonzContent-Type)Úresolve_server_api_keyr?   Ú
ValueError)Úselfr9   r:   r;   Úkwargss        r   Úvalidate_environmentz+ParallelAISearchConfig.validate_environment?   sX   € ð ×-Ñ-Ø"Ø$ØDØ/Ø!×6Ñ6ð .ó 
ˆñ ÜÐhÓiÐiØ&ˆ�ÑØ"4ˆ�ÑØˆr   Úoptional_paramsÚdatac                 ó¬   — |xs t        d«      xs | j                  }|j                  d«      }|j                  d«      s|j	                  d«      › d�}|S )Nr?   ú/z
/v1/searchz/v1)r	   r?   ÚrstripÚendswithÚremovesuffix)rG   r;   rJ   rK   rH   s        r   Úget_complete_urlz'ParallelAISearchConfig.get_complete_urlS   sX   € ð Òbœ~Ð.DÓEÒbÈ×IbÑIbˆà—?‘? 3Ó'ˆØ× Ñ  Ô.Ø"×/Ñ/°Ó6Ð7°zÐBˆHàˆr   Úqueryc                 ó¦  — t        |«      }i }t        |t        «      r||d<   n|g|d<   ||d<   |j                  dd«      }|j                  dd«      }|€|�t        j                  ||«      }|xs d|d<   i }d|v r|j                  d«      |d<   d|v r|j                  d«      |d	<   d
|v rd
|j                  d
«      i|d<   i }	d|v r|j                  d«      |	d<   d|v r|j                  d«      |	d<   |	r|	|d<   |j                  |j                  di «      «       |r||d<   |j                  dd«       t        |«      }
|
j                  |«       |
S )aÉ  
        Transform Search request to Parallel AI v1 API format.

        Args:
            query: Search query (string or list of strings)
                - If string: maps to `search_queries` (single item) and `objective`
                - If list: maps to `search_queries` (keyword queries)
            optional_params: Optional parameters for the request
                - mode: Search mode ('turbo', 'basic', 'advanced'); defaults to 'basic'
                - processor: Legacy v1beta param; 'base' maps to mode 'basic', 'pro' to 'advanced'
                - max_results: Maximum number of search results -> `advanced_settings.max_results`
                - search_domain_filter: Domains to include -> `advanced_settings.source_policy.include_domains`
                - exclude_domains: Domains to exclude -> `advanced_settings.source_policy.exclude_domains`
                - country: ISO 3166-1 alpha-2 code -> `advanced_settings.location`
                - max_chars_per_result: -> `advanced_settings.excerpt_settings.max_chars_per_result`
                - Any other params are passed through to the request body as-is

        Returns:
            Dict with request data following the v1 search request spec
        r'   r(   r)   NÚ	processorr/   r#   Úcountryr"   r   r    Úsearch_domain_filterr   r   r   r-   Úmax_tokens_per_page)r$   Ú
isinstancer   Úpopr3   ÚgetÚupdate)rG   rR   rJ   rH   ÚparamsÚrequest_datar)   rT   r-   r   Úresult_datas              r   Útransform_search_requestz/ParallelAISearchConfig.transform_search_requestb   s�  € ô4 ˜_Ó-ˆà79ˆä�eœTÔ"Ø-2ˆLÐ)Ò*à.3¨WˆLÐ)Ñ*Ø(-ˆL˜Ñ%à�z‰z˜& $Ó'ˆØ!Ÿ:™: k°4Ó8ˆ	Øˆ<˜IÐ1Ü+×/Ñ/°	¸9ÓEˆDð  $š wˆ�VÑà@BÐà˜FÑ"Ø/5¯z©z¸-Ó/HÐ˜mÑ,à˜ÑØ,2¯J©J°yÓ,AÐ˜jÑ)à! VÑ+Ø5KÈVÏZÉZÐXnÓMoÐ4pÐÐ0Ñ1à8:ˆà! VÑ+Ø/5¯z©zÐ:PÓ/QˆMÐ+Ñ,à Ñ&Ø/5¯z©zÐ:KÓ/LˆMÐ+Ñ,áØ1>Ð˜oÑ.à× Ñ  §¡Ð,?ÀÓ!DÔEáØ0AˆLÐ,Ñ-ð 	�
‰
Ð(¨$Ô/ä#'¨Ó#5ˆØ×Ñ˜6Ô"ØÐr   Úraw_responseÚlogging_objc           	      ón  — |j                  «       }g }|j                  dg «      D ]‚  }|j                  d«      xs g }|rdj                  |«      nd}t        |j                  d«      xs d|j                  d«      xs d||j                  d«      d¬	«      }	|j	                  |	«       Œ„ t        |d
¬«      S )aj  
        Transform Parallel AI v1 API response to LiteLLM unified SearchResponse format.

        Parallel AI -> LiteLLM mappings:
        - results[].title -> SearchResult.title
        - results[].url -> SearchResult.url
        - results[].excerpts (array) -> SearchResult.snippet (joined string)
        - results[].publish_date -> SearchResult.date
        ÚresultsÚexcerptsz ... Ú ÚtitleÚurlÚpublish_dateN)rf   rg   ÚsnippetÚdateÚlast_updatedÚsearch)rc   Úobject)ÚjsonrZ   Újoinr   Úappendr   )
rG   r`   ra   rH   Úresponse_jsonrc   Úresultrd   ri   Úsearch_results
             r   Útransform_search_responsez0ParallelAISearchConfig.transform_search_response±   s¹   € ð  ,×0Ñ0Ó2ˆàˆØ#×'Ñ'¨	°2Ó6ò 	*ˆFØ—z‘z *Ó-Ò3°ˆHÙ08�g—l‘l 8Ô,¸bˆGä(Ø—j‘j Ó)Ò/¨RØ—J‘J˜uÓ%Ò+¨ØØ—Z‘Z Ó/Ø!ôˆMð �N‰N˜=Õ)ð	*ô ØØô
ð 	
r   )NN)N)r   r   r   r?   Ústaticmethodr   r8   r$   rI   r   rQ   r_   ÚhttpxÚResponseÚLiteLLMLoggingObjr   rt   r   r   r   r5   r5   8   sñ   „ Ø4Ðàð˜cò ó ðð #Ø#ñ	àðð �t‘ðð ˜‘*ð	ð 
óð0 *.ñ	à˜‘*ðð ðð �T˜$‘ZÑ $Ñ&ð	ð 
óðMà�T˜#‘Y‰ðMð ðMð
 
óMð^"
à—n‘nð"
ð 'ð"
ð
 
ô"
r   r5   )r.   Útypingr   r   rv   Ú*litellm.litellm_core_utils.litellm_loggingr   rx   Ú+litellm.llms.base_llm.search.transformationr   r   r   Úlitellm.secret_managers.mainr	   r   r   r   r&   r3   r   r5   r   r   r   ú<module>r}      s}   ðò÷ $ã å S÷ñ õ
 8ô˜i¨uõ ô °%õ ô )°5õ ô3˜i¨uõ 3ð ,3¸:Ñ"FÐ ˜%Ó Fô[
Ð-õ [
r   