Ë
    uPêj_  ã                   ó–   — d Z ddlmZ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 Linkup's /search endpoint to search the web.

Linkup API Reference: https://docs.linkup.so/pages/documentation/api-reference/endpoint/post-search
é    )ÚFinalÚLiteralÚ	TypedDictN)ÚLogging)ÚBaseSearchConfigÚSearchResponseÚSearchResult)Úget_secret_strc                   ó<   — e Zd ZU dZeed<   ed   ed<   ed   ed<   y)Ú_LinkupSearchRequestRequiredz.Required fields for Linkup Search API request.Úq)ÚdeepÚstandardÚdepth)ÚsearchResultsÚsourcedAnswerÚ
structuredÚ
outputTypeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__r   © ó    ún/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/linkup/search/transformation.pyr   r      s"   … Ù8à
ƒFØÐ%Ñ&Ó&ØÐFÑGÔGr   r   c                   óx   — e Zd ZU dZeed<   eed<   eed<   eed<   eed<   ee   ed<   ee   ed<   eed	<   eed
<   y)ÚLinkupSearchRequestz‡
    Linkup Search API request format.
    Based on: https://docs.linkup.so/pages/documentation/api-reference/endpoint/post-search
    ÚstructuredOutputSchemaÚincludeSourcesÚincludeImagesÚfromDateÚtoDateÚincludeDomainsÚexcludeDomainsÚincludeInlineCitationsÚ
maxResultsN)	r   r   r   r   r   r   ÚboolÚlistÚintr   r   r   r   r      sD   … ñð
  ÓØÓØÓØƒMØƒKØ˜‘IÓØ˜‘IÓØ Ó Ø„Or   r   F)Útotalc            	       óÌ   — 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)ÚLinkupSearchConfigzhttps://api.linkup.so/v1Úreturnc                   ó   — y)NÚLinkupr   r   r   r   Úui_friendly_namez#LinkupSearchConfig.ui_friendly_name0   s   € àr   NÚheadersÚapi_keyÚapi_basec                 óz   — | j                  ||dd| j                  ¬«      }|st        d«      ‚d|› �|d<   d|d<   |S )	z:
        Validate environment and return headers.
        )ÚLINKUP_API_KEYÚLINKUP_API_BASE)Úcaller_api_keyÚcaller_api_baseÚkey_env_varsÚbase_env_varÚdefault_api_basezELINKUP_API_KEY is not set. Set `LINKUP_API_KEY` environment variable.zBearer ÚAuthorizationzapplication/jsonzContent-Type)Úresolve_server_api_keyr8   Ú
ValueError)Úselfr3   r4   r5   Úkwargss        r   Úvalidate_environmentz'LinkupSearchConfig.validate_environment4   s_   € ð ×-Ñ-Ø"Ø$Ø,Ø*Ø!×1Ñ1ð .ó 
ˆñ ÜÐdÓeÐeØ%,¨W¨IÐ#6ˆ�Ñ Ø"4ˆ�ÑØˆr   Úoptional_paramsÚdatac                 ól   — |xs t        d«      xs | j                  }|j                  d«      s|› d�}|S )z7
        Get complete URL for Search endpoint.
        r8   z/search)r
   r8   Úendswith)rA   r5   rD   rE   rB   s        r   Úget_complete_urlz#LinkupSearchConfig.get_complete_urlK   s@   € ð ÒXœ~Ð.?Ó@ÒXÀD×DXÑDXˆð × Ñ  Ô+Ø"˜ 7Ð+ˆHàˆr   Úqueryc                 óD  — t        |t        «      rdj                  |«      }||j                  dd«      |j                  dd«      dœ}d|v r|d   |d<   d	|v r|d	   |d
<   t	        |«      }|j                  «       D ]"  \  }}|| j                  «       vsŒ||vsŒ|||<   Œ$ |S )a¡  
        Transform Search request to Linkup API format.

        Transforms Perplexity unified spec parameters:
        - query -> q
        - max_results -> maxResults
        - search_domain_filter -> includeDomains
        - country -> (not directly supported)
        - max_tokens_per_page -> (not applicable)

        All other Linkup-specific parameters are passed through as-is.

        Args:
            query: Search query (string or list of strings). Linkup only supports single string queries.
            optional_params: Optional parameters for the request

        Returns:
            Dict with typed request data following LinkupSearchRequest spec
        ú r   r   r   r   )r   r   r   Úmax_resultsr(   Úsearch_domain_filterr%   )Ú
isinstancer*   ÚjoinÚgetÚdictÚitemsÚ(get_supported_perplexity_optional_params)rA   rI   rD   rB   Úrequest_dataÚresult_dataÚparamÚvalues           r   Útransform_search_requestz+LinkupSearchConfig.transform_search_request]   sÏ   € ô2 �eœTÔ"à—H‘H˜U“OˆEð Ø$×(Ñ(¨°*Ó=Ø)×-Ñ-¨l¸OÓLñ4
ˆð ˜OÑ+Ø)8¸Ñ)GˆL˜Ñ&à! _Ñ4Ø-<Ð=SÑ-TˆLÐ)Ñ*ô " ,Ó/ˆð ,×1Ñ1Ó3ò 	+‰LˆE�5Ø˜D×IÑIÓKÒKÐPUÐ]hÒPhØ%*�˜EÒ"ð	+ð Ðr   Úraw_responseÚlogging_objc           
      ó  — |j                  «       }g }|j                  dg «      }|D ]Ò  }|j                  dd«      }|dk(  rRt        |j                  dd«      |j                  dd«      |j                  dd«      dd¬	«      }	|j                  |	«       Œl|d
k(  sŒrt        |j                  d|j                  dd«      «      |j                  dd«      |j                  dd«      dd¬	«      }	|j                  |	«       ŒÔ t	        |d¬«      S )aF  
        Transform Linkup API response to LiteLLM unified SearchResponse format.

        Linkup -> LiteLLM mappings:
        - results[].name -> SearchResult.title
        - results[].url -> SearchResult.url
        - results[].content -> SearchResult.snippet
        - No date field in results (set to None)
        - No last_updated field in Linkup response (set to None)

        Args:
            raw_response: Raw httpx response from Linkup API
            logging_obj: Logging object for tracking

        Returns:
            SearchResponse with standardized format
        ÚresultsÚtypeÚtextÚnameÚ ÚurlÚcontentN)Útitlera   ÚsnippetÚdateÚlast_updatedÚimageÚsearch)r\   Úobject)ÚjsonrP   r	   Úappendr   )
rA   rY   rZ   rB   Úresponse_jsonr\   Úraw_resultsÚresultÚresult_typeÚsearch_results
             r   Útransform_search_responsez,LinkupSearchConfig.transform_search_response‘   s  € ð.  ,×0Ñ0Ó2ˆð ˆð +×.Ñ.¨y¸"Ó=ˆà!ò 	.ˆFà Ÿ*™* V¨VÓ4ˆKà˜fÒ$Ü ,Ø Ÿ*™* V¨RÓ0ØŸ
™
 5¨"Ó-Ø"ŸJ™J y°"Ó5ØØ!%ô!�ð —‘˜}Õ-Ø Ó'ä ,Ø Ÿ*™* V¨V¯Z©Z¸¸rÓ-BÓCØŸ
™
 5¨"Ó-Ø"ŸJ™J y°"Ó5ØØ!%ô!�ð —‘˜}Õ-ð-	.ô0 ØØô
ð 	
r   )NN)N)r   r   r   r8   Ústaticmethodr   r2   rQ   rC   r*   rH   rX   ÚhttpxÚResponseÚLiteLLMLoggingObjr   rq   r   r   r   r.   r.   -   sì   „ Ø0€Oàð˜cò ó ðð #Ø#ñ	àðð �t‘ðð ˜‘*ð	ð 
óð6 *.ñ	à˜‘*ðð ðð �T˜$‘ZÑ $Ñ&ð	ð 
óð$2à�T˜#‘Y‰ð2ð ð2ð
 
ó2ðh:
à—n‘nð:
ð 'ð:
ð
 
ô:
r   r.   )r   Útypingr   r   r   rs   Ú*litellm.litellm_core_utils.litellm_loggingr   ru   Ú+litellm.llms.base_llm.search.transformationr   r   r	   Úlitellm.secret_managers.mainr
   r   r   r.   r   r   r   ú<module>rz      sS   ðñ÷ -Ñ ,ã å S÷ñ õ
 8ôH 9ô HôÐ6¸eõ ô"^
Ð)õ ^
r   