Ë
    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)a[  
Calls fastCRW's /v1/search endpoint to search the web.

fastCRW is a Firecrawl-compatible web data engine (single Rust binary; self-host
or cloud). The search response uses the Firecrawl-compatible envelope
{ "success": true, "data": [ { "title", "url", "description", "markdown"? } ] }.

fastCRW API Reference: https://fastcrw.com/docs/rest-api
é    )ÚFinalÚ	TypedDictN)ÚLogging)ÚBaseSearchConfigÚSearchResponseÚSearchResult)Úget_secret_strc                   ó   — e Zd ZU dZeed<   y)Ú_FastCRWSearchRequestRequiredz/Required fields for fastCRW Search API request.ÚqueryN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__© ó    úo/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/fastcrw/search/transformation.pyr   r      s
   … Ù9à„Jr   r   c                   ó6   — e Zd ZU dZeed<   ee   ed<   eed<   y)ÚFastCRWSearchRequestz\
    fastCRW Search API request format.
    Based on: https://fastcrw.com/docs/rest-api
    ÚlimitÚsourcesÚscrapeOptionsN)	r   r   r   r   Úintr   Úlistr   Údictr   r   r   r   r      s   … ñð
 ƒJØ�#‰YÓØÔr   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)ÚFastCRWSearchConfigzhttps://fastcrw.com/api/v1Úreturnc                   ó   — y)NÚfastCRWr   r   r   r   Úui_friendly_namez$FastCRWSearchConfig.ui_friendly_name,   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.
        )ÚCRW_API_KEYÚCRW_API_BASE)Úcaller_api_keyÚcaller_api_baseÚkey_env_varsÚbase_env_varÚdefault_api_basez?CRW_API_KEY is not set. Set `CRW_API_KEY` environment variable.zBearer ÚAuthorizationzapplication/jsonzContent-Type)Úresolve_server_api_keyÚFASTCRW_API_BASEÚ
ValueError)Úselfr%   r&   r'   Úkwargss        r   Úvalidate_environmentz(FastCRWSearchConfig.validate_environment0   s_   € ð ×-Ñ-Ø"Ø$Ø)Ø'Ø!×2Ñ2ð .ó 
ˆñ ÜÐ^Ó_Ð_Ø%,¨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.
        r*   z/search)r	   r2   Úendswith)r4   r'   r7   r8   r5   s        r   Úget_complete_urlz$FastCRWSearchConfig.get_complete_urlG   s?   € ð ÒVœ~¨nÓ=ÒVÀ×AVÑAVˆð × Ñ  Ô+Ø"˜ 7Ð+ˆHàˆr   r   c                 ó  — t        |t        «      rdj                  |«      }d|i}d|v r|d   |d<   t        |«      }|j	                  «       D ]"  \  }}|| j                  «       vsŒ||vsŒ|||<   Œ$ d|vr	dgddœ|d<   |S )	a  
        Transform Search request to fastCRW API format.

        Transforms Perplexity unified spec parameters:
        - query -> query (same)
        - max_results -> limit

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

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

        Returns:
            Dict with typed request data following FastCRWSearchRequest spec
        ú r   Úmax_resultsr   r   ÚmarkdownT)ÚformatsÚonlyMainContent)Ú
isinstancer   Újoinr   ÚitemsÚ(get_supported_perplexity_optional_params)r4   r   r7   r5   Úrequest_dataÚresult_dataÚparamÚvalues           r   Útransform_search_requestz,FastCRWSearchConfig.transform_search_requestY   s¶   € ô, �eœTÔ"à—H‘H˜U“OˆEð �Uð5
ˆð
 ˜OÑ+Ø$3°MÑ$BˆL˜Ñ!ô " ,Ó/ˆð ,×1Ñ1Ó3ò 	+‰LˆE�5Ø˜D×IÑIÓKÒKÐPUÐ]hÒPhØ%*�˜EÒ"ð	+ð  +Ñ-à&˜<Ø#'ñ,ˆK˜Ñ(ð
 Ðr   Úraw_responseÚlogging_objc                 ó^  — |j                  «       }g }|j                  dg «      }t        |t        «      rm|D ]h  }|j                  d«      xs |j                  dd«      }t	        |j                  dd«      |j                  dd«      |dd¬«      }	|j                  |	«       Œj t        |d	¬
«      S )aÊ  
        Transform fastCRW API response to LiteLLM unified SearchResponse format.

        fastCRW (Firecrawl-compatible) returns:
            {"success": true, "data": [{"url": "...", "title": "...", "description": "...", "markdown"?: "..."}, ...]}

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

        Returns:
            SearchResponse with standardized format
        r8   r?   ÚdescriptionÚ ÚtitleÚurlN)rP   rQ   ÚsnippetÚdateÚlast_updatedÚsearch)ÚresultsÚobject)ÚjsonÚgetrB   r   r   Úappendr   )
r4   rK   rL   r5   Úresponse_jsonrV   r8   ÚresultrR   Úsearch_results
             r   Útransform_search_responsez-FastCRWSearchConfig.transform_search_response�   s²   € ð&  ,×0Ñ0Ó2ˆàˆà#×'Ñ'¨°Ó3ˆä�dœDÔ!Øò 	.�Ø Ÿ*™* ZÓ0ÒQ°F·J±J¸}ÈbÓ4Q�Ü ,Ø Ÿ*™* W¨bÓ1ØŸ
™
 5¨"Ó-Ø#ØØ!%ô!�ð —‘˜}Õ-ð	.ô ØØô
ð 	
r   )NN)N)r   r   r   r2   Ústaticmethodr   r$   r   r6   r   r;   rJ   ÚhttpxÚResponseÚLiteLLMLoggingObjr   r^   r   r   r   r    r    )   sí   „ Ø3Ðàð˜cò ó ðð #Ø#ñ	àðð �t‘ðð ˜‘*ð	ð 
óð6 *.ñ	à˜‘*ðð ðð �T˜$‘ZÑ $Ñ&ð	ð 
óð$2à�T˜#‘Y‰ð2ð ð2ð
 
ó2ðh(
à—n‘nð(
ð 'ð(
ð
 
ô(
r   r    )r   Útypingr   r   r`   Ú*litellm.litellm_core_utils.litellm_loggingr   rb   Ú+litellm.llms.base_llm.search.transformationr   r   r   Úlitellm.secret_managers.mainr	   r   r   r    r   r   r   ú<module>rg      sN   ðñ÷ $ã å S÷ñ õ
 8ô Iô ôÐ8Àõ ôL
Ð*õ L
r   