Ë
    kQêjm  ã                   óZ   — d dl 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)Úcached_property)ÚOptionalé   )Úattempt_import_or_raiseé   )ÚRerankerc                   ó  ‡ — e Zd ZdZ	 	 	 	 	 ddededee   dee   dee   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 )ÚVoyageAIRerankera_  
    Reranks the results using the VoyageAI Rerank API.
    https://docs.voyageai.com/docs/reranker

    Parameters
    ----------
    model_name : str, default "rerank-english-v2.0"
        The name of the cross encoder model to use. Available voyageai models are:
        - rerank-2.5
        - rerank-2.5-lite
        - rerank-2
        - rerank-2-lite
    column : str, default "text"
        The name of the column to use as input to the cross encoder model.
    top_n : int, default None
        The number of results to return. If None, will return all results.
    return_score : str, default "relevance"
        options are "relevance" or "all". Only "relevance" is supported for now.
    api_key : str, default None
        The API key to use. If None, will use the VOYAGE_API_KEY environment variable.
    truncation : Optional[bool], default None
    Ú
model_nameÚcolumnÚtop_nÚapi_keyÚ
truncationc                 ój   •— t         ‰| �  |«       || _        || _        || _        || _        || _        y )N)ÚsuperÚ__init__r   r   r   r   r   )Úselfr   r   r   Úreturn_scorer   r   Ú	__class__s          €ú_/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/lancedb/rerankers/voyageai.pyr   zVoyageAIReranker.__init__'   s5   ø€ ô 	‰Ñ˜Ô&Ø$ˆŒØˆŒØˆŒ
ØˆŒØ$ˆ�ó    c                 ó"   — d| j                   › d�S )NzVoyageAIReranker(model_name=ú))r   )r   s    r   Ú__str__zVoyageAIReranker.__str__7   s   € Ø-¨d¯o©oÐ->¸aÐ@Ð@r   c                 óþ   — t        d«      }t        j                  j                  d«      €| j                  €t        d«      ‚|j                  | j                  xs t        j                  j                  d«      ¬«      S )NÚvoyageaiÚVOYAGE_API_KEYzƒVOYAGE_API_KEY not set. Either set it in your environment or                 pass it as `api_key` argument to the VoyageAIReranker.)r   )r   ÚosÚenvironÚgetr   Ú
ValueErrorÚClient)r   r   s     r   Ú_clientzVoyageAIReranker._client:   sn   € ä*¨:Ó6ˆÜ�:‰:�>‰>Ð*Ó+Ð3¸¿¹Ð8LÜðHóð ð �‰Ø—L‘LÒD¤B§J¡J§N¡NÐ3CÓ$Dð ó 
ð 	
r   Ú
result_setÚqueryc           	      ó6  — | j                  |«      }t        |«      dk(  r|S || j                     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%   Ú	documentsÚtop_kÚmodelr   Ú_relevance_score)Útype)Ú_handle_empty_resultsÚlenr   Ú	to_pylistr#   Úrerankr   r   r   ÚresultsÚlistÚzipÚindexÚrelevance_scoreÚtakeÚappend_columnÚpaÚarrayÚfloat32)	r   r$   r%   ÚdocsÚresponser0   ÚresultÚindicesÚscoress	            r   Ú_rerankzVoyageAIReranker._rerankF   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%   r@   rA   Úcombined_resultss        r   Úrerank_hybridzVoyageAIReranker.rerank_hybrid`   sl   € ð �:‰:˜ÒØ#×:Ñ:¸>È;ÓWÑà#×1Ñ1°.À+ÓNÐØŸ<™<Ð(8¸%Ó@ÐØ�:‰:˜Ò$Ø#×9Ñ9Ð:JÓKÐàÐr   c                 ól   — | j                  ||«      }| j                  dk(  r|j                  dg«      }|S )NrD   Ú	_distance©r?   rE   Údrop_columns)r   r%   r@   s      r   Úrerank_vectorzVoyageAIReranker.rerank_vectorp   s6   € ØŸ™ n°eÓ<ˆØ�:‰:˜Ò$Ø+×8Ñ8¸+¸ÓGˆNØÐr   c                 ól   — | j                  ||«      }| j                  dk(  r|j                  dg«      }|S )NrD   Ú_scorerM   )r   r%   rA   s      r   Ú
rerank_ftszVoyageAIReranker.rerank_ftsv   s6   € Ø—l‘l ;°Ó6ˆØ�:‰:˜Ò$Ø%×2Ñ2°H°:Ó>ˆKØÐr   )ÚtextNrD   NT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   ÚintÚboolr   r   r   r#   r7   ÚTabler?   rJ   rO   rR   Ú__classcell__)r   s   @r   r
   r
      sâ   ø„ ñð4 Ø#Ø Ø!%Ø%)ñ%àð%ð ð%ð ˜‰}ð	%ð ˜#‘ð%ð ˜T‘Nõ%ò Að ñ	
ó ð	
ð "§(¡(ð °3ó ð4 àð ð Ÿ™ð ð —X‘Xó	 ð  3ð ¸¿¹ó ð ð °"·(±(÷ r   r
   )r   Ú	functoolsr   Útypingr   Úpyarrowr7   Úutilr   Úbaser   r
   © r   r   ú<module>rc      s'   ðó
 
Ý %Ý ã å *Ý ôk�xõ kr   