Ë
    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)zÈ
Calls You.com's /v1/search endpoint to search the web.

You.com API Reference: https://you.com/docs/api-reference/search/v1-search
OpenAPI spec:          https://you.com/specs/openapi_search_v1.yaml
é    )ÚFinalÚ	TypedDictN)ÚLogging)ÚBaseSearchConfigÚSearchResponseÚSearchResult)Úget_secret_strc                   ó   — e Zd ZU dZeed<   y)Ú_YouComSearchRequestRequiredz/Required fields for You.com Search API request.ÚqueryN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__© ó    úo/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/you_com/search/transformation.pyr   r      s
   … Ù9à„Jr   r   c                   ód   — e Zd ZU dZeed<   eed<   eed<   eed<   ee   ed<   ee   ed<   eed<   y	)
ÚYouComSearchRequestzg
    You.com Search API request format.
    Based on: https://you.com/specs/openapi_search_v1.yaml
    ÚcountÚcountryÚlanguageÚ	freshnessÚinclude_domainsÚexclude_domainsÚ
safesearchN)r   r   r   r   Úintr   r   Úlistr   r   r   r   r      s6   … ñð
 ƒJØƒLØƒMØƒNØ˜#‘YÓØ˜#‘YÓØ„Or   r   F)Útotalc            	       óÐ   — e Zd 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)ÚYouComSearchConfigzhttps://ydc-index.ioz$https://api.you.com/v1/agents/searchÚreturnc                   ó   — y)NzYou.comr   r   r   r   Úui_friendly_namez#YouComSearchConfig.ui_friendly_name1   s   € àr   NÚheadersÚapi_keyÚapi_basec                 ó‚   — | j                  ||dd| j                  ¬«      }d|d<   |j                  dd«       |r||d<   |S )	a
  
        Set headers for the You.com Search API.

        If YOUCOM_API_KEY (or an explicit api_key) is present, use the keyed
        endpoint with the `X-API-Key` header. Otherwise fall through to the
        keyless free tier; no auth header is required.
        )ÚYOUCOM_API_KEYÚYOUCOM_API_BASE)Úcaller_api_keyÚcaller_api_baseÚkey_env_varsÚbase_env_varÚdefault_api_basezapplication/jsonzContent-TypezAccept-EncodingÚidentityz	X-API-Key)Úresolve_server_api_keyÚYOU_COM_API_BASEÚ
setdefault)Úselfr'   r(   r)   Úkwargss        r   Úvalidate_environmentz'YouComSearchConfig.validate_environment5   s_   € ð ×-Ñ-Ø"Ø$Ø,Ø*Ø!×2Ñ2ð .ó 
ˆð #5ˆ�Ñð
 	×ÑÐ,¨jÔ9ÙØ#*ˆG�KÑ Øˆr   Úoptional_paramsÚdatac                 ó  — |€t        d«      }|€9|j                  d«      xs t        d«      }|r| j                  }n| j                  S |j	                  d«      }|j                  d«      s|j                  d«      s|› d�}|S )aF  
        Pick the endpoint based on whether an API key is configured.

        - api_base explicit override     -> use it as-is (normalized)
        - YOUCOM_API_KEY set             -> keyed endpoint (ydc-index.io/v1/search)
        - no key                         -> keyless free tier (api.you.com/v1/agents/search)
        r,   r(   r+   ú/z
/v1/searchz/v1/agents/search)r	   Úgetr4   ÚYOU_COM_FREE_API_BASEÚrstripÚendswith)r6   r)   r9   r:   r7   r(   s         r   Úget_complete_urlz#YouComSearchConfig.get_complete_urlT   s‹   € ð ÐÜ%Ð&7Ó8ˆHàÐØ#ŸZ™Z¨	Ó2ÒV´nÐEUÓ6VˆGÙØ×0Ñ0‘ð ×1Ñ1Ð1à—?‘? 3Ó'ˆà× Ñ  Ô.°x×7HÑ7HÐI\Ô7]Ø"˜ :Ð.ˆHàˆr   r   c                 ó4  — t        |t        «      rdj                  |«      }d|i}d|v r|d   |d<   d|v r|d   |d<   d|v r|d   j                  «       |d<   t	        |«      }|j                  «       D ]"  \  }}|| j                  «       vsŒ||vsŒ|||<   Œ$ |S )uj  
        Transform Search request to You.com API format.

        Perplexity unified spec â†’ You.com mappings:
        - query                 â†’ query
        - max_results           â†’ count
        - search_domain_filter  â†’ include_domains
        - country               â†’ country
        - max_tokens_per_page   â†’ (not applicable, ignored)
        ú r   Úmax_resultsr   Úsearch_domain_filterr   r   )Ú
isinstancer    ÚjoinÚlowerÚdictÚitemsÚ(get_supported_perplexity_optional_params)r6   r   r9   r7   Úrequest_dataÚresult_dataÚparamÚvalues           r   Útransform_search_requestz+YouComSearchConfig.transform_search_requestt   sÍ   € ô  �eœTÔ"Ø—H‘H˜U“OˆEð �Uð4
ˆð ˜OÑ+Ø$3°MÑ$BˆL˜Ñ!à! _Ñ4Ø.=Ð>TÑ.UˆLÐ*Ñ+à˜Ñ'Ø&5°iÑ&@×&FÑ&FÓ&HˆL˜Ñ#ä! ,Ó/ˆà+×1Ñ1Ó3ò 	+‰LˆE�5Ø˜D×IÑIÓKÒKÐPUÐ]hÒPhØ%*�˜EÒ"ð	+ð Ðr   Úraw_responseÚlogging_objc                 óî  — |j                  «       }|j                  d«      xs i }|j                  d«      xs g }|j                  d«      xs g }g }t        |«      t        |«      z   D ]~  }	|	j                  d«      xs g }
|
r|
d   n|	j                  dd«      }|j                  t	        |	j                  dd«      |	j                  d	d«      ||	j                  d
«      d¬«      «       Œ€ t        |d¬«      S )u‚  
        Transform You.com API response to LiteLLM unified SearchResponse format.

        You.com â†’ LiteLLM mappings (for both `results.web[]` and `results.news[]`):
        - title       â†’ SearchResult.title
        - url         â†’ SearchResult.url
        - snippets[0] â†’ SearchResult.snippet (falls back to `description`)
        - page_age    â†’ SearchResult.date
        ÚresultsÚwebÚnewsÚsnippetsr   ÚdescriptionÚ ÚtitleÚurlÚpage_ageN)rZ   r[   ÚsnippetÚdateÚlast_updatedÚsearch)rT   Úobject)Újsonr=   r    Úappendr   r   )r6   rQ   rR   r7   Úresponse_jsonÚraw_resultsÚweb_resultsÚnews_resultsrT   ÚitemrW   r]   s               r   Útransform_search_responsez,YouComSearchConfig.transform_search_responseœ   sò   € ð  ,×0Ñ0Ó2ˆØ*×.Ñ.¨yÓ9Ò?¸Rˆà(Ÿ_™_¨UÓ3Ò9°rˆØ)Ÿo™o¨fÓ5Ò;¸ˆà-/ˆÜ˜Ó%¬¨\Ó(:Ñ:ò 	ˆDØ—x‘x 
Ó+Ò1¨rˆHÙ%-�h˜q’k°4·8±8¸MÈ2Ó3NˆGØ�N‰NÜØŸ(™( 7¨BÓ/ØŸ™ ¨Ó+Ø#ØŸ™ *Ó-Ø!%ôõð	ô ØØô
ð 	
r   )NN)N)r   r   r   r4   r>   Ústaticmethodr   r&   rI   r8   r    rA   rP   ÚhttpxÚResponseÚLiteLLMLoggingObjr   ri   r   r   r   r#   r#   *   sø   „ à-Ðð CÐàð˜cò ó ðð #Ø#ñ	àðð �t‘ðð ˜‘*ð	ð 
óðF *.ñ	à˜‘*ðð ðð �T˜$‘ZÑ $Ñ&ð	ð 
óð@&à�T˜#‘Y‰ð&ð ð&ð
 
ó&ðP&
à—n‘nð&
ð 'ð&
ð
 
ô&
r   r#   )r   Útypingr   r   rk   Ú*litellm.litellm_core_utils.litellm_loggingr   rm   Ú+litellm.llms.base_llm.search.transformationr   r   r   Úlitellm.secret_managers.mainr	   r   r   r#   r   r   r   ú<module>rr      sN   ðñ÷ $ã å S÷ñ õ
 8ô 9ô ôÐ6¸eõ ôX
Ð)õ X
r   