
    Cjn*                        S r SSKrSSKrSSKJr  SSKJrJrJrJ	r	J
r
Jr  SSKrSSKrSSKJr  SSKJr  SSKJr  SSKJrJr  SS	KJr  SS
KJr  SSKJrJrJr  \" 5       r     SS\
\!   S\
\	\"      S\
\!   S\
\"   S\\"\4   4
S jjr#\        SS\\"\	\"   4   S\"S\
\!   S\
\	\"      S\
\!   S\
\"   S\
\"   S\
\"   S\
\\$\RJ                  4      S\
\\"\4      S\4S jj5       r&\        SS\\"\	\"   4   S\"S\
\!   S\
\	\"      S\
\!   S\
\"   S\
\"   S\
\"   S\
\\$\RJ                  4      S\
\\"\4      S\\\\\\4   4   4S jj5       r'g)z#
Main Search function for LiteLLM.
    N)partial)Any	CoroutineDictListOptionalUnion)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    0 nU b  XS'   Ub  XS'   Ub  X$S'   Ub  X4S'   U$ )aO  
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        e/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/litellm/search/main.py_build_search_optional_paramsr      sI    $ ')O)4&'2F./&1D-.%,	"    querysearch_providerapi_keyapi_basetimeoutextra_headersc
                   #    [        5       n [        R                  " 5       nSU
S'   [        [        4U UUUUUUUUU	S.
U
D6n[
        R                  " 5       n[        UR                  U5      nUR                  SU5      I Sh  vN n[        R                  " U5      (       a  UI Sh  vN nOUnUc  [        SU 35      eU$  N? N! [         a"  nU S3n[        R                  " UUUUU
S9eSnAff = f7f)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'
 
 &&(#CGGT2"2249JKK}--**H$HGzR   L +  
'(0
$$ / (
 	

sM   C6A5C C$C (C)C C6C C 
C3C..C33C6c
                    [        5       n U
R                  S5      nU
R                  SS5      nU
R                  SS5      SL n[        U [        [
        45      (       d  [        S[        U 5       35      e[        U [
        5      (       a"  [        S U  5       5      (       d  [        S	5      e[        R                  " [        U5      S
9nUc  [        SU 35      e[        R                  " SU 35        [        UUUUS9n[        U
S9nUR!                  5        H  u  nnUU;  d  M  UUU'   M     [        R                  " SU 35        UR#                  UUU	=(       d    0 S9nUR%                  UUUS9nU S3nUR'                  U
UUUUS.US9  [(        R+                  U UU=(       d    [,        UUUUUUUS9
nU$ ! [.         a"  nU S3n[0        R2                  " UUUUU
S9eSnAff = f)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   B   #    U  H  n[        U[        5      v   M     g 7f)N)
isinstancestr).0qs     r   	<genexpr>search.<locals>.<genexpr>   s     .Q5az!S/A/A5s   z'All items in query list must be strings)providerz&Search is not supported for provider: zSearch call - provider: )r   r   r   r   )r;   zSearch optional_params: )r!   r"   headers)r"   r   r!   r'   )rG   r"   )r;   r)   r   litellm_paramsr*   )
r   r   r#   logging_objr!   r"   r*   r&   rP   provider_configr(   )r.   popgetrI   rJ   listr7   typeallr   get_provider_search_configr   r
   debugr   r   itemsvalidate_environmentget_complete_urlupdate_from_kwargsbase_llm_http_handlerr1   r   r8   r9   r:   )r   r    r   r   r   r   r!   r"   r#   r$   r;   r<   rF   rG   	_is_asyncsearch_provider_configr   filtered_kwargskeyvaluerP   complete_urlrD   rB   rC   s                            r   r1   r1      sY   F J^
17<Q1R)/4Et)LJJy%0D8	 %#t--A$u+O  eT""3.Q5.Q+Q+QFGG "<<(9 	 ")EoEVWXX77HIJ 8#!5 3	
 46B *//1JC/)',$ 2 	77HIJ )==!'R > 
 .>>+ ? 
 ((0
..+#2( !0 	/ 		
 )//+.+! /2 0 
  
'(0
$$ / (
 	

s   DF9 &BF9 9
G%G  G%)NNNN)NNNNNNNN)(__doc__r/   r2   	functoolsr   typingr   r   r   r   r   r	   httpxr9   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_   intrJ   r   floatTimeoutr&   r1   r   r   r   <module>ru      s      > >   + - S X I / R R +, 
 "&04)-!	#"49- "# c]	
 
#s(^@  "&04)-!!"59.2e
d3i e
e
 #e
 #49-	e

 "#e
 c]e
 c]e
 sme
 eE5==012e
 DcN+e
 e
 e
P  "&04)-!!"59.2a
d3i a
a
 #a
 #49-	a

 "#a
 c]a
 c]a
 sma
 eE5==012a
 DcN+a
 >9S#~%=>>?a
 a
r   