Ë
    kQêj  ã                   ób   — d dl Z d dlmZ d dlmZmZ d dlZddlm	Z	 ddl
mZ dZ G d	„ d
e«      Zy)é    N)Úcached_property)ÚDictÚOptionalé   )Úattempt_import_or_raiseé   )ÚRerankerz!https://us-south.ml.cloud.ibm.comc                   ó°  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 ddededee   dedee   dee   dee   d	ee   d
ee   fˆ fd„Zdefd„Ze	d„ «       Z
defd„Zdej                  dedej                  fd„Zdedej                  dej                  dej                  fd„Zdedej                  dej                  fd„Zdedej                  dej                  fd„Zˆ xZS )ÚWatsonxRerankeru»  
    Reranks the results using the IBM watsonx.ai Rerank API.

    Uses the ``ibm_watsonx_ai`` SDK (``Rerank.generate``) under the hood.

    API Docs:
        https://cloud.ibm.com/docs/apis/watsonx-ai#text-rerank

    Supported rerank models:
        https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/fm-models-embed.html?context=wx#rerank

    Parameters
    ----------
    model_name : str, default "cross-encoder/ms-marco-minilm-l-12-v2"
        The ID of the rerank model to use.
    column : str, default "text"
        The name of the column to use as input to the reranker.
    top_n : int, optional
        Return only the top-n results. If ``None``, all results are returned.
    return_score : str, default "relevance"
        Options are ``"relevance"`` or ``"all"``.
    api_key : str, optional
        IBM Cloud API key.  Falls back to the ``WATSONX_API_KEY`` environment
        variable when not provided.
    project_id : str, optional
        watsonx.ai project ID.  Explicit value takes precedence over the
        ``WATSONX_PROJECT_ID`` environment variable.  Mutually exclusive with
        ``space_id`` â€” exactly one must be supplied.
    space_id : str, optional
        watsonx.ai deployment space ID.  Explicit value takes precedence over
        the ``WATSONX_SPACE_ID`` environment variable.  Mutually exclusive with
        ``project_id`` â€” exactly one must be supplied.
    url : str, optional
        watsonx.ai service URL.  Defaults to
        ``"https://us-south.ml.cloud.ibm.com"``.
    truncate_input_tokens : int, optional
        Truncate each input to this many tokens before scoring.  Passed
        directly to the ``parameters`` dict of ``Rerank.generate``.
    Ú
model_nameÚcolumnÚtop_nÚreturn_scoreÚapi_keyÚ
project_idÚspace_idÚurlÚtruncate_input_tokensc
                 ó”   •— t         ‰
| �  |«       || _        || _        || _        || _        || _        || _        || _        |	| _	        y )N)
ÚsuperÚ__init__r   r   r   r   r   r   r   r   )Úselfr   r   r   r   r   r   r   r   r   Ú	__class__s             €ú^/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/lancedb/rerankers/watsonx.pyr   zWatsonxReranker.__init__:   sK   ø€ ô 	‰Ñ˜Ô&Ø$ˆŒØˆŒØˆŒ
ØˆŒØ$ˆŒØ ˆŒØˆŒØ%:ˆÕ"ó    Úreturnc                 ó"   — d| j                   › d�S )NzWatsonxReranker(model_name=ú))r   )r   s    r   Ú__str__zWatsonxReranker.__str__P   s   € Ø,¨T¯_©_Ð,=¸QÐ?Ð?r   c                 óH  — t        d«      }t        d«      }| j                  xs t        j                  j	                  d«      }|st        d«      ‚|j                  || j                  xs t        ¬«      }| j                  }| j                  }|€@|€>t        j                  j	                  d«      }t        j                  j	                  d«      }|r|rt        d«      ‚|s|st        d	«      ‚t        | j                  |¬
«      }|r||d<   n||d<    |j                  di |¤ŽS )NÚibm_watsonx_aiz ibm_watsonx_ai.foundation_modelsÚWATSONX_API_KEYzoWATSONX_API_KEY not set. Either set it in your environment or pass it as `api_key` argument to WatsonxReranker.)r   r   ÚWATSONX_PROJECT_IDÚWATSONX_SPACE_IDz4Provide either `project_id` or `space_id`, not both.z”Either WATSONX_PROJECT_ID or WATSONX_SPACE_ID must be set. Pass one as an argument to WatsonxReranker or set the corresponding environment variable.)Úmodel_idÚcredentialsr   r   © )r   r   ÚosÚenvironÚgetÚ
ValueErrorÚCredentialsr   ÚDEFAULT_WATSONX_URLr   r   Údictr   ÚRerank)r   r!   Ú ibm_watsonx_ai_foundation_modelsr   r&   r   r   Úkwargss           r   Ú_clientzWatsonxReranker._clientS   s#  € ä0Ð1AÓBˆÜ+BØ.ó,
Ð(ð
 —,‘,ÒC¤"§*¡*§.¡.Ð1BÓ"CˆÙÜðDóð ð %×0Ñ0ØØ—‘Ò/Ô/ð 1ó 
ˆð —_‘_ˆ
Ø—=‘=ˆàÐ (Ð"2äŸ™Ÿ™Ð(<Ó=ˆJÜ—z‘z—~‘~Ð&8Ó9ˆHá™(ÜÐSÓTÐTÙ¡(Üð(óð ô  T§_¡_À+ÔNˆÙØ#-ˆF�<Ò à!)ˆF�:Ñà6Ð/×6Ñ6Ñ@¸Ñ@Ð@r   c                 ó‚   — ddi}| j                   �| j                   |d<   d|i}| j                  �| j                  |d<   |S )z?Build the ``parameters`` dict forwarded to ``Rerank.generate``.ÚinputsTr   Úreturn_optionsr   )r   r   )r   r5   Úparamss      r   Ú_build_paramszWatsonxReranker._build_paramsƒ   sP   € à (¨$Ð/ˆØ�:‰:Ð!Ø&*§j¡jˆN˜7Ñ#Ø(¨.Ð9ˆØ×%Ñ%Ð1Ø.2×.HÑ.HˆFÐ*Ñ+Øˆr   Ú
result_setÚqueryc                 óÖ  — | j                  |«      }t        |«      dk(  r|S || j                     j                  «       }| j                  j                  ||| j                  «       ¬«      }|d   }t        |D �cg c]  }|d   |d   f‘Œ c}Ž \  }}|j                  t        |«      «      }|j                  dt        j                  |t        j                  «       ¬«      «      }|S c c}w )Nr   )r9   r4   r6   ÚresultsÚindexÚscoreÚ_relevance_score)Útype)Ú_handle_empty_resultsÚlenr   Ú	to_pylistr2   Úgenerater7   ÚzipÚtakeÚlistÚappend_columnÚpaÚarrayÚfloat32)	r   r8   r9   ÚdocsÚresponser;   ÚresultÚindicesÚscoress	            r   Ú_rerankzWatsonxReranker._rerank�   sã   € Ø×/Ñ/°
Ó;ˆ
Üˆz‹?˜aÒØÐà˜$Ÿ+™+Ñ&×0Ñ0Ó2ˆØ—<‘<×(Ñ(ØØØ×%Ñ%Ó'ð )ó 
ˆð
 ˜9Ñ%ˆäØ?FÖG°Vˆv�g‰  w¡Ò0ÒGð
‰ˆ�ð  —_‘_¤T¨'£]Ó3ˆ
Ø×-Ñ-Ø¤§¡¨´b·j±j³lÔ Có
ˆ
ð Ðùò Hs   Á9C&Úvector_resultsÚfts_resultsc                 óÒ   — | j                   dk(  r| j                  ||«      }n| j                  ||«      }| j                  ||«      }| j                   dk(  r| j	                  |«      }|S )NÚallÚ	relevance)r=   Ú_merge_and_keep_scoresÚmerge_resultsrP   Ú_keep_relevance_score)r   r9   rQ   rR   Úcombined_resultss        r   Úrerank_hybridzWatsonxReranker.rerank_hybrid£   sl   € ð �:‰:˜ÒØ#×:Ñ:¸>È;ÓWÑà#×1Ñ1°.À+ÓNÐØŸ<™<Ð(8¸%Ó@ÐØ�:‰:˜Ò$Ø#×9Ñ9Ð:JÓKÐØÐr   c                 ól   — | j                  ||«      }| j                  dk(  r|j                  dg«      }|S )NrU   Ú	_distance©rP   r=   Údrop_columns)r   r9   rQ   s      r   Úrerank_vectorzWatsonxReranker.rerank_vector²   s6   € ØŸ™ n°eÓ<ˆØ�:‰:˜Ò$Ø+×8Ñ8¸+¸ÓGˆNØÐr   c                 ól   — | j                  ||«      }| j                  dk(  r|j                  dg«      }|S )NrU   Ú_scorer]   )r   r9   rR   s      r   Ú
rerank_ftszWatsonxReranker.rerank_fts¸   s6   € Ø—l‘l ;°Ó6ˆØ�:‰:˜Ò$Ø%×2Ñ2°H°:Ó>ˆKØÐr   )	z%cross-encoder/ms-marco-minilm-l-12-v2ÚtextNrU   NNNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   Úintr   r   r   r2   r   r7   rH   ÚTablerP   rZ   r_   rb   Ú__classcell__)r   s   @r   r   r      sj  ø„ ñ&ðT BØØ#Ø'Ø!%Ø$(Ø"&Ø!Ø/3ñ;àð;ð ð;ð ˜‰}ð	;ð
 ð;ð ˜#‘ð;ð ˜S‘Mð;ð ˜3‘-ð;ð �c‰]ð;ð  (¨™}õ;ð,@˜ó @ð ñ-Aó ð-Að^˜tó ð "§(¡(ð °3ð ¸2¿8¹8ó ð, àð ð Ÿ™ð ð —X‘Xð	 ð
 
�‰ó ð 3ð ¸¿¹ð ÀRÇXÁXó ð ð °"·(±(ð ¸r¿x¹x÷ r   r   )r(   Ú	functoolsr   Útypingr   r   ÚpyarrowrH   Úutilr   Úbaser	   r-   r   r'   r   r   ú<module>rq      s-   ðó
 
Ý %ß !ã å *Ý à9Ð ôk�hõ kr   