Ë
    uPêjW  ã                   ó’   — 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 Firecrawl's /search endpoint to search the web.

Firecrawl API Reference: https://docs.firecrawl.dev/api-reference/endpoint/search
é    )ÚFinalÚ	TypedDictN)ÚLogging)ÚBaseSearchConfigÚSearchResponseÚSearchResult)Úget_secret_strc                   ó   — e Zd ZU dZeed<   y)Ú_FirecrawlSearchRequestRequiredz1Required fields for Firecrawl Search API request.ÚqueryN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__© ó    úq/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/firecrawl/search/transformation.pyr   r      s
   … Ù;à„Jr   r   c                   ó‚   — e Zd ZU dZeed<   ee   ed<   eeeef      ed<   eed<   eed<   eed<   eed<   e	ed	<   eed
<   y)ÚFirecrawlSearchRequestzu
    Firecrawl Search API request format.
    Based on: https://docs.firecrawl.dev/api-reference/endpoint/search
    ÚlimitÚsourcesÚ
categoriesÚtbsÚlocationÚcountryÚtimeoutÚignoreInvalidURLsÚscrapeOptionsN)
r   r   r   r   Úintr   Úlistr   ÚdictÚboolr   r   r   r   r      sK   … ñð
 ƒJØ�#‰YÓØ�T˜#˜s˜(‘^Ñ$Ó$Ø	ƒHØƒMØƒLØƒLØÓØÔ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)ÚFirecrawlSearchConfigzhttps://api.firecrawl.dev/v2Úreturnc                   ó   — y)NÚ	Firecrawlr   r   r   r   Úui_friendly_namez&FirecrawlSearchConfig.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.
        )ÚFIRECRAWL_API_KEYÚFIRECRAWL_API_BASE)Úcaller_api_keyÚcaller_api_baseÚkey_env_varsÚbase_env_varÚdefault_api_basezKFIRECRAWL_API_KEY is not set. Set `FIRECRAWL_API_KEY` environment variable.zBearer ÚAuthorizationzapplication/jsonzContent-Type)Úresolve_server_api_keyr1   Ú
ValueError)Úselfr,   r-   r.   Úkwargss        r   Úvalidate_environmentz*FirecrawlSearchConfig.validate_environment2   s_   € ð ×-Ñ-Ø"Ø$Ø/Ø-Ø!×4Ñ4ð .ó 
ˆñ ÜÐjÓkÐkØ%,¨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.
        r1   z/search)r	   r1   Úendswith)r:   r.   r=   r>   r;   s        r   Úget_complete_urlz&FirecrawlSearchConfig.get_complete_urlI   s@   € ð Ò^œ~Ð.BÓCÒ^Àt×G^ÑG^ˆð × Ñ  Ô+Ø"˜ 7Ð+ˆHàˆr   r   c                 ó  — t        |t        «      rdj                  |«      }d|i}d|v r|d   |d<   d|v r|d   |d<   t        |«      }|j	                  «       D ]"  \  }}|| j                  «       vsŒ||vsŒ|||<   Œ$ d|vr	dgdd	œ|d<   |S )
uÑ  
        Transform Search request to Firecrawl API format.

        Transforms Perplexity unified spec parameters:
        - query â†’ query (same)
        - max_results â†’ limit
        - search_domain_filter â†’ (not directly supported, can use scrapeOptions)
        - country â†’ country
        - max_tokens_per_page â†’ (not applicable, ignored)

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

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

        Returns:
            Dict with typed request data following FirecrawlSearchRequest spec
        ú r   Úmax_resultsr   r   r    ÚmarkdownT)ÚformatsÚonlyMainContent)Ú
isinstancer"   Újoinr#   ÚitemsÚ(get_supported_perplexity_optional_params)r:   r   r=   r;   Úrequest_dataÚresult_dataÚparamÚvalues           r   Útransform_search_requestz.FirecrawlSearchConfig.transform_search_request[   sÍ   € ô2 �eœTÔ"à—H‘H˜U“OˆEð �Uð7
ˆð
 ˜OÑ+Ø$3°MÑ$BˆL˜Ñ!à˜Ñ'Ø&5°iÑ&@ˆ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i «      }t        |t        «      ro|D ]h  }|j                  d«      xs |j                  dd«      }t	        |j                  dd«      |j                  dd«      |dd¬«      }	|j                  |	«       Œj �nt        |t        «      �r|j                  d	g «      }
|
D ]h  }|j                  d«      xs |j                  dd«      }t	        |j                  dd«      |j                  dd«      |dd¬«      }	|j                  |	«       Œj |j                  d
g «      }|D ]w  }|j                  d«      xs |j                  dd«      }t	        |j                  dd«      |j                  dd«      ||j                  d«      d¬«      }	|j                  |	«       Œy t        |d¬«      S )a  
        Transform Firecrawl API response to LiteLLM unified SearchResponse format.

        Supports both response formats:

        Firecrawl Cloud (v2):
            {"data": {"web": [...], "news": [...]}}

        Firecrawl Self-Hosted (v1):
            {"success": true, "data": [{"url": "...", "title": "...", ...}, ...]}

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

        Returns:
            SearchResponse with standardized format
        r>   rE   ÚdescriptionÚ ÚtitleÚurlN)rV   rW   ÚsnippetÚdateÚlast_updatedÚwebÚnewsrX   rY   Úsearch)ÚresultsÚobject)ÚjsonÚgetrH   r"   r   Úappendr#   r   )r:   rQ   rR   r;   Úresponse_jsonr^   r>   ÚresultrX   Úsearch_resultÚweb_resultsÚnews_resultss               r   Útransform_search_responsez/FirecrawlSearchConfig.transform_search_response•   s¿  € ð0  ,×0Ñ0Ó2ˆð ˆà#×'Ñ'¨°Ó3ˆä�dœDÔ!àò 	.�Ø Ÿ*™* ZÓ0ÒQ°F·J±J¸}ÈbÓ4Q�Ü ,Ø Ÿ*™* W¨bÓ1ØŸ
™
 5¨"Ó-Ø#ØØ!%ô!�ð —‘˜}Õ-ò	.ô ˜œdÕ#à!%§¡¨%°Ó!4ˆKà%ò .�à Ÿ*™* ZÓ0ÒQ°F·J±J¸}ÈbÓ4Q�ä ,Ø Ÿ*™* W¨bÓ1ØŸ
™
 5¨"Ó-Ø#ØØ!%ô!�ð —‘˜}Õ-ð.ð #'§(¡(¨6°2Ó"6ˆLØ&ò 
.�Ø Ÿ*™* ZÓ0ÒM°F·J±J¸yÈ"Ó4M�ä ,Ø Ÿ*™* W¨bÓ1ØŸ
™
 5¨"Ó-Ø#ØŸ™ FÓ+Ø!%ô!�ð —‘˜}Õ-ð
.ô ØØô
ð 	
r   )NN)N)r   r   r   r1   Ústaticmethodr   r+   r#   r<   r"   rA   rP   ÚhttpxÚResponseÚLiteLLMLoggingObjr   rh   r   r   r   r'   r'   +   sñ   „ Ø7Ðàð˜cò ó ðð #Ø#ñ	àðð �t‘ðð ˜‘*ð	ð 
óð6 *.ñ	à˜‘*ðð ðð �T˜$‘ZÑ $Ñ&ð	ð 
óð$8à�T˜#‘Y‰ð8ð ð8ð
 
ó8ðtM
à—n‘nðM
ð 'ðM
ð
 
ôM
r   r'   )r   Útypingr   r   rj   Ú*litellm.litellm_core_utils.litellm_loggingr   rl   Ú+litellm.llms.base_llm.search.transformationr   r   r   Úlitellm.secret_managers.mainr	   r   r   r'   r   r   r   ú<module>rq      sN   ðñ÷ $ã å S÷ñ õ
 8ô iô ôÐ<ÀEõ ô"w
Ð,õ w
r   