
    AHjF*                        d Z ddlZddlZddlmZ ddlmZmZmZm	Z	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
e!   de
e	e"      de
e!   de
e"   dee"ef   f
dZ#e	 	 	 	 	 	 	 	 ddee"e	e"   f   de"de
e!   de
e	e"      de
e!   de
e"   de
e"   de
e"   de
ee$ejJ                  f      de
ee"ef      defd       Z&e	 	 	 	 	 	 	 	 ddee"e	e"   f   de"de
e!   de
e	e"      de
e!   de
e"   de
e"   de
e"   de
ee$ejJ                  f      de
ee"ef      deeeeeef   f   fd       Z'y)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    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        K/root/tools/cai/cai_env/lib/python3.12/site-packages/litellm/search/main.py_build_search_optional_paramsr      sQ    $ ')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&   9   s)    v J*
%%' y
+#!5 3'
 
 &&(#CGGT2"2249JKK}-**H$HGzR   L +  
'(0
$$ / (
 	

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     .Qaz!S/A.Qs   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'   )rG   r"   )r;   r)   r   litellm_paramsr*   )
r   r   r#   logging_objr!   r"   r*   r&   rO   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valuerO   complete_urlrD   rB   rC   s                            r   r1   r1      sR   F J]
17<Q1R)/4Et)LJJy%0D8	 %#t-A$u+O  eT"3.Q5.Q+QFGG
 "<<$_5
 	 ")EoEVWXX77HIJ 8#!5 3	
 46B *//1 	-JC/)',$	- 	77HIJ )==!'R > 
 .>>+ ? 
 ((0
..+#2( !0 	/ 		
 )//+.+! /2 0 
  
'(0
$$ / (
 	

s   DF+ BF+ +	G4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>rt      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`
d3i `
`
 #`
 #49-	`

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