Ë
    tPêj€$  ã                   ó€   — d Z ddlmZmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZ  G d
„ d«      Zy)z?
Search Tool Registry for managing search tool configurations.
é    )ÚdatetimeÚtimezone)ÚFinal)Úverbose_proxy_logger)Ú
safe_dumps)Úcall_with_db_reconnect_retry)ÚPrismaClient)ÚSearchToolsRepository)Ú
SearchToolc                   ó´   — e Zd ZdZd„ Zedefd„«       Zdede	fd„Z
dede	fd	„Zdedede	fd
„Zede	dee   fd„«       Zdede	dedz  fd„Zdede	dedz  fd„Zy)ÚSearchToolRegistryzO
    Handles adding, removing, and getting search tools in DB + in memory.
    c                  ó   — y )N© )Úselfs    úx/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/search_endpoints/search_tool_registry.pyÚ__init__zSearchToolRegistry.__init__   s   € Øó    Úreturnc                 ó˜   — t        | «      }d|v r|d   r|d   j                  «       |d<   d|v r|d   r|d   j                  «       |d<   |S )zê
        Convert Prisma result to dict with datetime objects as ISO format strings.

        Args:
            prisma_obj: Prisma model instance

        Returns:
            Dict with datetime fields converted to ISO strings
        Ú
created_atÚ
updated_at)ÚdictÚ	isoformat)Ú
prisma_objÚresults     r   Ú_convert_prisma_to_dictz*SearchToolRegistry._convert_prisma_to_dict   sa   € ô ˜ZÓ(ˆà˜6Ñ! f¨\Ò&:Ø#)¨,Ñ#7×#AÑ#AÓ#CˆF�<Ñ Ø˜6Ñ! f¨\Ò&:Ø#)¨,Ñ#7×#AÑ#AÓ#CˆF�<Ñ Øˆr   Úsearch_toolÚprisma_clientc           	   ƒ   ó°  K  — 	 |j                  d«      }t        t        |j                  di «      «      «      }t        |j                  di «      «      }t        |«      j                  j                  |||t        j                  t        j                  «      t        j                  t        j                  «      dœ¬«      ƒ d{  –—† }t        |«      }|j                  |d<   |j                  j                  «       |d<   |j                  j                  «       |d	<   |S 7 ŒZ# t        $ r)}t        j                   d
|«       t        d|› �«      ‚d}~ww xY w­w)zé
        Add a search tool to the database.

        Args:
            search_tool: Search tool configuration
            prisma_client: Prisma client instance

        Returns:
            Dict with created search tool data
        Úsearch_tool_nameÚlitellm_paramsÚsearch_tool_info)r    r!   r"   r   r   )ÚdataNÚsearch_tool_idr   r   z"Error adding search tool to DB: %sz Error adding search tool to DB: )Úgetr   r   r
   ÚtableÚcreater   Únowr   Úutcr$   r   r   r   Ú	Exceptionr   Ú	exception)	r   r   r   r    r!   r"   Úcreated_search_toolÚsearch_tool_dictÚes	            r   Úadd_search_tool_to_dbz(SearchToolRegistry.add_search_tool_to_db/   s>  è ø€ ð	DØ&1§o¡oÐ6HÓ&IÐÜ)3´D¸¿¹ÐIYÐ[]Ó9^Ó4_Ó)`ˆNÜ+5°k·o±oÐFXÐZ\Ó6]Ó+^Ðô 0EÀ]Ó/S×/YÑ/Y×/`Ñ/`à(8Ø&4Ø(8Ü"*§,¡,¬x¯|©|Ó"<Ü"*§,¡,¬x¯|©|Ó"<ñð 0aó 0÷ *Ðô '+¨;Ó&7ÐØ1D×1SÑ1SÐÐ-Ñ.Ø-@×-KÑ-K×-UÑ-UÓ-WÐ˜\Ñ*Ø-@×-KÑ-K×-UÑ-UÓ-WÐ˜\Ñ*à#Ð#ð!*ùô" ò 	DÜ ×*Ñ*Ð+OÐQRÔSÜÐ>¸q¸cÐBÓCÐCûð	Düs<   ‚E„C D! ÃDÃAD! ÄEÄD! Ä!	EÄ*$EÅEÅEr$   c              ƒ   ó‚  K  — 	 t        |«      j                  j                  d|i¬«      ƒ d{  –—† }|st        d|› d�«      ‚t        |«      j                  j	                  d|i¬«      ƒ d{  –—†  d|› d�|j
                  dœS 7 ŒW7 Œ# t        $ r)}t        j                  d	|«       t        d
|› �«      ‚d}~ww xY w­w)zê
        Delete a search tool from the database.

        Args:
            search_tool_id: ID of search tool to delete
            prisma_client: Prisma client instance

        Returns:
            Dict with success message
        r$   ©ÚwhereNzSearch tool with ID z
 not foundzSearch tool z deleted successfully)Úmessager    z&Error deleting search tool from DB: %sz$Error deleting search tool from DB: )r
   r&   Úfind_uniquer*   Údeleter    r   r+   )r   r$   r   Úexisting_toolr.   s        r   Údelete_search_tool_from_dbz-SearchToolRegistry.delete_search_tool_from_dbU   sç   è ø€ ð	Hä)>¸}Ó)M×)SÑ)S×)_Ñ)_Ø'¨Ð8ð *`ó *÷ $ˆMñ !ÜÐ"6°~Ð6FÀjÐ QÓRÐRô (¨Ó6×<Ñ<×CÑCÐK[Ð]kÐJlÐCÓm×mÐmð *¨.Ð)9Ð9NÐOØ$1×$BÑ$Bñð ð$øð nùô ò 	HÜ ×*Ñ*Ð+SÐUVÔWÜÐBÀ1À#ÐFÓGÐGûð	HüsJ   ‚B?„*B
 ®B¯?B
 Á.BÁ/B
 ÂB?ÂB
 ÂB
 Â
	B<Â$B7Â7B<Â<B?c           	   ƒ   óè  K  — 	 |j                  d«      }t        t        |j                  di «      «      «      }t        |j                  di «      «      }t        |«      j                  j                  d|i|||t        j                  t        j                  «      dœ¬«      ƒ d{  –—† }| j                  |«      S 7 Œ# t        $ r)}t        j                  d|«       t        d	|› �«      ‚d}~ww xY w­w)
a,  
        Update a search tool in the database.

        Args:
            search_tool_id: ID of search tool to update
            search_tool: Updated search tool configuration
            prisma_client: Prisma client instance

        Returns:
            Dict with updated search tool data
        r    r!   r"   r$   )r    r!   r"   r   )r2   r#   Nz$Error updating search tool in DB: %sz"Error updating search tool in DB: )r%   r   r   r
   r&   Úupdater   r(   r   r)   r   r*   r   r+   )	r   r$   r   r   r    r!   r"   Úupdated_search_toolr.   s	            r   Úupdate_search_tool_in_dbz+SearchToolRegistry.update_search_tool_in_dbt   sñ   è ø€ ð	FØ&1§o¡oÐ6HÓ&IÐÜ)3´D¸¿¹ÐIYÐ[]Ó9^Ó4_Ó)`ˆNÜ+5°k·o±oÐFXÐZ\Ó6]Ó+^Ðô 0EÀ]Ó/S×/YÑ/Y×/`Ñ/`Ø'¨Ð8à(8Ø&4Ø(8Ü"*§,¡,¬x¯|©|Ó"<ñ	ð 0aó 0÷ *Ðð ×/Ñ/Ð0CÓDÐDð*ùô ò 	FÜ ×*Ñ*Ð+QÐSTÔUÜÐ@ÀÀÐDÓEÐEûð	Füs;   ‚C2„B!B= Â%B;Â&B= Â:C2Â;B= Â=	C/Ã$C*Ã*C/Ã/C2c              ƒ   ó"  ‡ K  — 	 t        ‰ ˆ fd„d¬«      ƒ d{  –—† }g }|D ]1  }t        j                  |«      }|j                  t	        di |¤Ž«       Œ3 |S 7 Œ># t
        $ r)}t        j                  d|«       t        d|› �«      ‚d}~ww xY w­w)z»
        Get all search tools from the database.

        Args:
            prisma_client: Prisma client instance

        Returns:
            List of search tool configurations
        c                  óR   •— t        ‰ «      j                  j                  ddi¬«      S )Nr   Údesc)Úorder)r
   r&   Ú	find_many)r   s   €r   ú<lambda>zASearchToolRegistry.get_all_search_tools_from_db.<locals>.<lambda>¦   s,   ø€ Ô-¨mÓ<×BÑB×LÑLØ'¨Ð0ð Mó € r   Ú+get_all_search_tools_from_db_lookup_failure)ÚreasonNz&Error getting search tools from DB: %sz$Error getting search tools from DB: r   )r   r   r   Úappendr   r*   r   r+   )r   Úsearch_tools_from_dbÚsearch_toolsr   r-   r.   s   `     r   Úget_all_search_tools_from_dbz/SearchToolRegistry.get_all_search_tools_from_db–   s°   øè ø€ ð	HÜ0LØóð Eô1÷ +Ð ð 57ˆLØ3ò D�ä#5×#MÑ#MÈkÓ#ZÐ Ø×#Ñ#¤JÑ$BÐ1AÑ$BÕCðDð
  Ðð+ùô ò 	HÜ ×*Ñ*Ð+SÐUVÔWÜÐBÀ1À#ÐFÓGÐGûð	Hüs8   ƒB…A ™Aš=A ÁBÁA Á	BÁ#$BÂBÂBNc              ƒ   ó  K  — 	 t        |«      j                  j                  d|i¬«      ƒ d{  –—† }|sy| j                  |«      }t	        di |¤ŽS 7 Œ## t
        $ r)}t        j                  d|«       t        d|› �«      ‚d}~ww xY w­w)a  
        Get a search tool by its ID from the database.

        Args:
            search_tool_id: ID of search tool to retrieve
            prisma_client: Prisma client instance

        Returns:
            Search tool configuration or None if not found
        r$   r1   Nú%Error getting search tool from DB: %sú#Error getting search tool from DB: r   ©r
   r&   r4   r   r   r*   r   r+   )r   r$   r   r   r-   r.   s         r   Úget_search_tool_by_id_from_dbz0SearchToolRegistry.get_search_tool_by_id_from_db·   s¡   è ø€ ð	GÜ'<¸]Ó'K×'QÑ'Q×']Ñ']Ø'¨Ð8ð (^ó (÷ "ˆKñ Øð '+×&BÑ&BÀ;Ó&OÐÜÑ1Ð 0Ñ1Ð1ð"ùô ò 	GÜ ×*Ñ*Ð+RÐTUÔVÜÐAÀ!ÀÐEÓFÐFûð	GüóB   ‚B	„*A ®A¯A µB	¶A ÁB	ÁA Á	BÁ$BÂBÂB	r    c              ƒ   ó  K  — 	 t        |«      j                  j                  d|i¬«      ƒ d{  –—† }|sy| j                  |«      }t	        di |¤ŽS 7 Œ## t
        $ r)}t        j                  d|«       t        d|› �«      ‚d}~ww xY w­w)a  
        Get a search tool by its name from the database.

        Args:
            search_tool_name: Name of search tool to retrieve
            prisma_client: Prisma client instance

        Returns:
            Search tool configuration or None if not found
        r    r1   NrI   rJ   r   rK   )r   r    r   r   r-   r.   s         r   Úget_search_tool_by_name_from_dbz2SearchToolRegistry.get_search_tool_by_name_from_dbÓ   s¢   è ø€ ð	GÜ'<¸]Ó'K×'QÑ'Q×']Ñ']Ø)Ð+;Ð<ð (^ó (÷ "ˆKñ Øð '+×&BÑ&BÀ;Ó&OÐÜÑ1Ð 0Ñ1Ð1ð"ùô ò 	GÜ ×*Ñ*Ð+RÐTUÔVÜÐAÀ!ÀÐEÓFÐFûð	GürM   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústaticmethodr   r   r   r	   r/   Ústrr7   r;   ÚlistrG   rL   rO   r   r   r   r   r      sð   „ ñòð ð¨tò ó ðð,$D°zð $DÐR^ó $DðLH¸sð HÐS_ó Hð> F¸Sð  FÈzð  FÐjvó  FðD ðHØ#ðHà	ˆjÑ	òHó ðHð@GØ!ðGØ2>ðGà	�dÑ	óGð8GØ #ðGØ4@ðGà	�dÑ	ôGr   r   N)rS   r   r   Útypingr   Úlitellm._loggingr   Ú*litellm.litellm_core_utils.safe_json_dumpsr   Ú"litellm.proxy.db.exception_handlerr   Úlitellm.proxy.utilsr	   Ú'litellm.repositories.table_repositoriesr
   Úlitellm.types.searchr   r   r   r   r   ú<module>r^      s2   ðñ÷ (Ý å 1Ý AÝ KÝ ,Ý IÝ +÷]Gò ]Gr   