Ë
    kQêjî  ã                   óf   — d dl Z d dlmZ d dlmZ d dlmZ d dlZddl	m
Z
 ddlmZ  G d	„ d
e«      Zy)é    N)ÚVersion)Úcached_property)ÚUnioné   )Úattempt_import_or_raiseé   )ÚRerankerc                   ó  ‡ — e Zd ZdZ	 	 	 	 	 ddededeedf   deedf   fˆ fd„Zd„ Ze	d	„ «       Z
d
ej                  defd„Zdedej                  dej                  fd„Zdedej                  fd„Zdedej                  fd„Zˆ xZS )ÚCohereRerankera"  
    Reranks the results using the Cohere Rerank API.
    https://docs.cohere.com/docs/rerank-guide

    Parameters
    ----------
    model_name : str, default "rerank-english-v2.0"
        The name of the cross encoder model to use. Available cohere models are:
        - rerank-english-v2.0
        - rerank-multilingual-v2.0
    column : str, default "text"
        The name of the column to use as input to the cross encoder model.
    top_n : str, default None
        The number of results to return. If None, will return all results.
    NÚ
model_nameÚcolumnÚtop_nÚapi_keyc                 ó\   •— t         ‰| �  |«       || _        || _        || _        || _        y )N)ÚsuperÚ__init__r   r   r   r   )Úselfr   r   r   Úreturn_scorer   Ú	__class__s         €ú]/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/lancedb/rerankers/cohere.pyr   zCohereReranker.__init__!   s.   ø€ ô 	‰Ñ˜Ô&Ø$ˆŒØˆŒØˆŒ
Øˆ�ó    c                 ó"   — d| j                   › d�S )NzCohereReranker(model_name=ú))r   )r   s    r   Ú__str__zCohereReranker.__str__/   s   € Ø+¨D¯O©OÐ+<¸AÐ>Ð>r   c                 ó†  — t        d«      }t        |d«      r9t        |j                  «      t        d«      k  rt	        d|j                  › �«      ‚t
        j                  j                  d«      €| j                  €t	        d«      ‚|j                  | j                  xs t
        j                  j                  d«      «      S )NÚcohereÚ__version__z0.5.0z-cohere version must be at least 0.5.0, found ÚCOHERE_API_KEYz�COHERE_API_KEY not set. Either set it in your environment or                 pass it as `api_key` argument to the CohereReranker.)
r   Úhasattrr   r   Ú
ValueErrorÚosÚenvironÚgetr   ÚClient)r   r   s     r   Ú_clientzCohereReranker._client2   s­   € ä(¨Ó2ˆä�6˜=Ô)¬g°f×6HÑ6HÓ.IÌGØóM
ò /
ô Ø?À×@RÑ@RÐ?SÐTóð ô �:‰:�>‰>Ð*Ó+Ð3¸¿¹Ð8LÜðFóð ð �}‰}˜TŸ\™\ÒM¬R¯Z©Z¯^©^Ð<LÓ-MÓNÐNr   Ú
result_setÚqueryc           	      ó   — | j                  |«      }t        |«      dk(  r|S || j                     j                  «       }| j                  j                  ||| j                  | j                  ¬«      }|j                  }t        t        |D �cg c]  }|j                  |j                  f‘Œ c}Ž «      \  }}|j                  t        |«      «      }|j                  dt        j                   |t        j"                  «       ¬«      «      }|S c c}w )Nr   )r'   Ú	documentsr   ÚmodelÚ_relevance_score)Útype)Ú_handle_empty_resultsÚlenr   Ú	to_pylistr%   Úrerankr   r   ÚresultsÚlistÚzipÚindexÚrelevance_scoreÚtakeÚappend_columnÚpaÚarrayÚfloat32)	r   r&   r'   ÚdocsÚresponser1   ÚresultÚindicesÚscoress	            r   Ú_rerankzCohereReranker._rerankC   sò   € Ø×/Ñ/°
Ó;ˆ
Üˆz‹?˜aÒØÐØ˜$Ÿ+™+Ñ&×0Ñ0Ó2ˆØ—<‘<×&Ñ&ØØØ—*‘*Ø—/‘/ð	 'ó 
ˆð ×Ñð 	ô ÜÀwÖO¸V�6—<‘< ×!7Ñ!7Ò8ÒOÐPó
‰ˆ�ð  —_‘_¤T¨'£]Ó3ˆ
à×-Ñ-Ø¤§¡¨´b·j±j³lÔ Có
ˆ
ð Ðùò Ps   ÂDÚvector_resultsÚfts_resultsc                 óÒ   — | j                   dk(  r| j                  ||«      }n| j                  ||«      }| j                  ||«      }| j                   dk(  r| j	                  |«      }|S )NÚallÚ	relevance)ÚscoreÚ_merge_and_keep_scoresÚmerge_resultsr@   Ú_keep_relevance_score)r   r'   rA   rB   Úcombined_resultss        r   Úrerank_hybridzCohereReranker.rerank_hybrid\   sl   € ð �:‰:˜ÒØ#×:Ñ:¸>È;ÓWÑà#×1Ñ1°.À+ÓNÐØŸ<™<Ð(8¸%Ó@ÐØ�:‰:˜Ò$Ø#×9Ñ9Ð:JÓKÐàÐr   c                 ól   — | j                  ||«      }| j                  dk(  r|j                  dg«      }|S )NrE   Ú	_distance©r@   rF   Údrop_columns)r   r'   rA   s      r   Úrerank_vectorzCohereReranker.rerank_vectorl   s6   € ØŸ™ n°eÓ<ˆØ�:‰:˜Ò$Ø+×8Ñ8¸+¸ÓGˆNØÐr   c                 ól   — | j                  ||«      }| j                  dk(  r|j                  dg«      }|S )NrE   Ú_scorerN   )r   r'   rB   s      r   Ú
rerank_ftszCohereReranker.rerank_ftsr   s6   € Ø—l‘l ;°Ó6ˆØ�:‰:˜Ò$Ø%×2Ñ2°H°:Ó>ˆKØÐr   )zrerank-english-v3.0ÚtextNrE   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   Úintr   r   r   r%   r8   ÚTabler@   rK   rP   rS   Ú__classcell__)r   s   @r   r   r      sß   ø„ ñð$ 0ØØ"&Ø Ø$(ñàðð ðð �S˜$�YÑð	ð �s˜D�yÑ!õò?ð ñOó ðOð  "§(¡(ð °3ó ð2 àð ð Ÿ™ð ð —X‘Xó	 ð  3ð ¸¿¹ó ð ð °"·(±(÷ r   r   )r!   Úpackaging.versionr   Ú	functoolsr   Útypingr   Úpyarrowr8   Úutilr   Úbaser	   r   © r   r   ú<module>rd      s*   ðó
 
Ý %Ý %Ý ã å *Ý ôf�Xõ fr   