Ë
    uPêj'*  ã                   óŠ  — d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	 ddl
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mZ dd
lmZ ddlmZ ddlmZmZmZ  e«       Z	 	 	 	 ddedz  de e!   dz  dedz  de!dz  de"e!ef   f
d„Z#e	 	 	 	 	 	 	 	 dde!e e!   z  de!dedz  de e!   dz  dedz  de!dz  de!dz  de!dz  de$e
jJ                  z  dz  de"e!ef   dz  defd„«       Z&e	 	 	 	 	 	 	 	 dde!e e!   z  de!dedz  de e!   dz  dedz  de!dz  de!dz  de!dz  de$e
jJ                  z  dz  de"e!ef   dz  deeeeef   z  fd„«       Z'y)z#
Main Search function for LiteLLM.
é    N)Ú	Coroutine)Úpartial)ÚAnyÚFinal)Úverbose_logger)Úrequest_timeout)ÚLogging)ÚBaseSearchConfigÚSearchResponse)ÚBaseLLMHTTPHandler)ÚSearchProviders)ÚProviderConfigManagerÚclientÚfilter_out_litellm_paramsÚmax_resultsÚsearch_domain_filterÚmax_tokens_per_pageÚcountryÚreturnc                 óB   — i }| �| |d<   |�||d<   |�||d<   |�||d<   |S )as  
    Helper function to build optional_params dict from Perplexity Search API parameters.

    Args:
        max_results: Maximum number of results (1-20)
        search_domain_filter: List of domains to filter (max 20)
        max_tokens_per_page: Max tokens per page
        country: Country code filter

    Returns:
        Dict with non-None optional parameters
    r   r   r   r   © )r   r   r   r   Úoptional_paramss        úX/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/search/main.pyÚ_build_search_optional_paramsr      sQ   € ð$ .0€OàÐØ)4ˆ˜Ñ&ØÐ'Ø2FˆÐ.Ñ/ØÐ&Ø1DˆÐ-Ñ.ØÐØ%,ˆ˜	Ñ"àÐó    ÚqueryÚsearch_providerÚapi_keyÚapi_baseÚtimeoutÚextra_headersc
              ‹   óà  K  — t        «       }	 t        j                  «       }d|
d<   t        t        f| |||||||||	dœ
|
¤Ž}t        j                  «       }t        |j                  |«      }|j                  d|«      ƒ d{  –—† }t        j                  |«      r|ƒ d{  –—† }n|}|€t        d|› �«      ‚|S 7 Œ87 Œ# t        $ r$}|› d�}t        j                  |||||
¬«      ‚d}~ww xY w­w)a¡  
    Async Search function.

    Args:
        query: Search query (string or list of strings)
        search_provider: Provider name (e.g., "perplexity")
        max_results: Optional maximum number of results (1-20), default 10
        search_domain_filter: Optional list of domains to filter (max 20)
        max_tokens_per_page: Optional max tokens per page, default 1024
        country: Optional country code filter (e.g., 'US', 'GB', 'DE')
        api_key: Optional API key
        api_base: Optional API base URL
        timeout: Optional timeout
        extra_headers: Optional extra headers
        **kwargs: Additional parameters

    Returns:
        SearchResponse with results list following Perplexity format

    Example:
        ```python
        import litellm

        # Basic search
        response = await litellm.asearch(
            query="latest AI developments 2024",
            search_provider="perplexity"
        )

        # Search with options
        response = await litellm.asearch(
            query="AI developments",
            search_provider="perplexity",
            max_results=10,
            search_domain_filter=["arxiv.org", "nature.com"],
            max_tokens_per_page=1024,
            country="US"
        )

        # Access results
        for result in response.results:
            print(f"{result.title}: {result.url}")
            print(f"Snippet: {result.snippet}")
        ```
    TÚasearch)
r   r   r   r   r   r   r   r   r    r!   Nz5Got an unexpected None response from the Search API: ú/search©ÚmodelÚcustom_llm_providerÚoriginal_exceptionÚcompletion_kwargsÚextra_kwargs)ÚlocalsÚasyncioÚget_event_loopr   ÚsearchÚcontextvarsÚcopy_contextÚrunÚrun_in_executorÚiscoroutineÚ
ValueErrorÚ	ExceptionÚlitellmÚexception_type)r   r   r   r   r   r   r   r   r    r!   ÚkwargsÚ
local_varsÚloopÚfuncÚctxÚfunc_with_contextÚinit_responseÚresponseÚeÚ
model_names                       r   r#   r#   ;   s%  è ø€ ôv ›€Jð(
Ü×,Ñ,Ó.ˆØ ˆˆyÑäÜð
àØ+Ø#Ø!5Ø 3ØØØØØ'ñ
ð ñ
ˆô !×-Ñ-Ó/ˆÜ#*¨3¯7©7°DÓ#9ÐØ%)×%9Ñ%9¸$Ð@QÓ%R×Rˆä×Ñ˜}Ô-Ø*×*‰Hà$ˆHàÐÜÐTÐU]ÐT^Ð_Ó`Ð`àˆð  Søð +ùô ò 
Ø.Ð/¨wÐ7ˆ
Ü×$Ñ$ØØ /Ø Ø(Øô
ð 	
ûð
üsM   ‚C.ŽA3B> ÂB:ÂB> Â B<Â!B> Â9C.Â:B> Â<B> Â>	C+ÃC&Ã&C+Ã+C.c
                 ó°  — t        «       }	 |
j                  d«      }|
j                  dd«      }|
j                  dd«      du }t        | t        t
        f«      st        dt        | «      › �«      ‚t        | t
        «      rt        d„ | D «       «      st        d	«      ‚t        j                  t        |«      ¬
«      }|€t        d|› �«      ‚t        j                  d|«       t        ||||¬«      }t        |
¬«      }|j!                  «       D ]  \  }}||vsŒ|||<   Œ t        j                  d|«       |j#                  |||	xs i ¬«      }|j%                  |||¬«      }|› d�}|j'                  |
||||dœ|¬«       t(        j+                  | ||xs t,        |||||||¬«
      }|S # t.        $ r$}|› d�}t1        j2                  |||||
¬«      ‚d}~ww xY w)a™  
    Synchronous Search function.

    Args:
        query: Search query (string or list of strings)
        search_provider: Provider name (e.g., "perplexity")
        max_results: Optional maximum number of results (1-20), default 10
        search_domain_filter: Optional list of domains to filter (max 20)
        max_tokens_per_page: Optional max tokens per page, default 1024
        country: Optional country code filter (e.g., 'US', 'GB', 'DE')
        api_key: Optional API key
        api_base: Optional API base URL
        timeout: Optional timeout
        extra_headers: Optional extra headers
        **kwargs: Additional parameters

    Returns:
        SearchResponse with results list following Perplexity format

    Example:
        ```python
        import litellm

        # Basic search
        response = litellm.search(
            query="latest AI developments 2024",
            search_provider="perplexity"
        )

        # Search with options
        response = litellm.search(
            query="AI developments",
            search_provider="perplexity",
            max_results=10,
            search_domain_filter=["arxiv.org", "nature.com"],
            max_tokens_per_page=1024,
            country="US"
        )

        # Multi-query search
        response = litellm.search(
            query=["AI developments", "machine learning trends"],
            search_provider="perplexity"
        )

        # Access results
        for result in response.results:
            print(f"{result.title}: {result.url}")
            print(f"Snippet: {result.snippet}")
            if result.date:
                print(f"Date: {result.date}")
        ```
    Úlitellm_logging_objÚlitellm_call_idNr#   FTz/query must be a string or list of strings, got c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­w)N)Ú
isinstanceÚstr)Ú.0Úqs     r   ú	<genexpr>zsearch.<locals>.<genexpr>ï   s   è ø€ Ò.QÀa¬z¸!¼S×/AÑ.Qùs   ‚z'All items in query list must be strings)Úproviderz&Search is not supported for provider: zSearch call - provider: %s)r   r   r   r   )r8   zSearch optional_params: %s)r   r   Úheaders)r   r   r   r$   )rD   r   )r8   r&   r   Úlitellm_paramsr'   )
r   r   r    Úlogging_objr   r   r'   r#   rL   Úprovider_configr%   )r+   ÚpopÚgetrF   rG   Úlistr4   ÚtypeÚallr   Úget_provider_search_configr   r   Údebugr   r   ÚitemsÚvalidate_environmentÚget_complete_urlÚupdate_from_kwargsÚbase_llm_http_handlerr.   r   r5   r6   r7   )r   r   r   r   r   r   r   r   r    r!   r8   r9   rC   rD   Ú	_is_asyncÚsearch_provider_configr   Úfiltered_kwargsÚkeyÚvaluerL   Úcomplete_urlrA   r?   r@   s                            r   r.   r.   ¢   sG  € ôF ›€JðZ
Ø8>¿
¹
ÐCXÓ8YÐØ-3¯Z©ZÐ8IÈ4Ó-PˆØ!Ÿ:™: i°Ó7¸4Ð?ˆ	ô ˜%¤#¤t Ô-ÜÐNÌtÐTYË{ÈmÐ\Ó]Ð]ä�eœTÔ"¬3Ñ.QÈ5Ô.QÔ+QÜÐFÓGÐGô BW×AqÑAqÜ$ _Ó5ôB
Ðð "Ð)ÜÐEÀoÐEVÐWÓXÐXä×ÑÐ9¸?ÔKô "?Ø#Ø!5Ø 3Øô	"
ˆô ";À&Ô!Iˆð *×/Ñ/Ó1ò 	-‰JˆC�Ø˜/Ò)Ø',� Ò$ð	-ô 	×ÑÐ9¸?ÔKð 0×DÑDØØØ!Ò' Rð Eó 
ˆð 5×EÑEØØ+Øð Fó 
ˆð (Ð(¨Ð0ˆ
Ø×.Ñ.ØØØ+à#2Ø(ñð !0ð 	/ô 		
ô 0×6Ñ6ØØ+ØÒ.œØ+ØØ!Ø /ØØØ2ð 7ó 
ˆð ˆøÜò 
Ø'Ð(¨Ð0ˆ
Ü×$Ñ$ØØ /Ø Ø(Øô
ð 	
ûð
ús   ŒDF( ÄBF( Æ(	GÆ1GÇG)NNNN)NNNNNNNN)(Ú__doc__r,   r/   Úcollections.abcr   Ú	functoolsr   Útypingr   r   Úhttpxr6   Úlitellm._loggingr   Úlitellm.constantsr   Ú*litellm.litellm_core_utils.litellm_loggingr	   ÚLiteLLMLoggingObjÚ+litellm.llms.base_llm.search.transformationr
   r   Ú*litellm.llms.custom_httpx.llm_http_handlerr   Úlitellm.types.utilsr   Úlitellm.utilsr   r   r   r[   ÚintrR   rG   Údictr   ÚfloatÚTimeoutr#   r.   r   r   r   ú<module>rs      s  ðñó Û Ý %Ý ß ã ã Ý +Ý -Ý Sß XÝ IÝ /ß RÑ Rñ +Ó,Ð ð
 #Ø-1Ø&*Øñ	Ø�t‘ðà˜s™) dÑ*ðð ˜t™ðð �4‰Zð	ð
 
ˆ#ˆsˆ(�^óð@ ð #Ø-1Ø&*ØØØØ,0Ø+/ñc
Ø��c‘‰?ðc
àðc
ð �t‘ðc
ð ˜s™) dÑ*ð	c
ð
 ˜t™ðc
ð �4‰Zðc
ð �4‰Zðc
ð �D‰jðc
ð �U—]‘]Ñ" TÑ)ðc
ð ˜˜S˜‘> DÑ(ðc
ð òc
ó ðc
ðL ð #Ø-1Ø&*ØØØØ,0Ø+/ñ]
Ø��c‘‰?ð]
àð]
ð �t‘ð]
ð ˜s™) dÑ*ð	]
ð
 ˜t™ð]
ð �4‰Zð]
ð �4‰Zð]
ð �D‰jð]
ð �U—]‘]Ñ" TÑ)ð]
ð ˜˜S˜‘> DÑ(ð]
ð �i  S¨.Ð 8Ñ9Ñ9ò]
ó ñ]
r   