Ë
    kQêjë  ã                   óR   — d dl Z d dlmZ d dlmZ d dlZddlmZ dZ	 G d„ de«      Z
y)	é    N)Úcached_property)ÚUnioné   )ÚRerankerzhttps://api.jina.ai/v1/rerankc                   ó  ‡ — 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 )ÚJinaRerankeraM  
    Reranks the results using the Jina Rerank API.
    https://jina.ai/rerank

    Parameters
    ----------
    model_name : str, default "jina-reranker-v2-base-multilingual"
        The name of the cross reanker model to use
    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.
    api_key : str, default None
        The api key to access Jina API. If you pass None, you can set JINA_API_KEY
        environment variable
    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/jinaai.pyr   zJinaReranker.__init__"   s.   ø€ ô 	‰Ñ˜Ô&Ø$ˆŒØˆŒØˆŒ
Øˆ�ó    c                 ó"   — d| j                   › d�S )NzJinaReranker(model_name=ú))r	   )r   s    r   Ú__str__zJinaReranker.__str__0   s   € Ø)¨$¯/©/Ð):¸!Ð<Ð<r   c                 ó†  — dd l }t        j                  j                  d«      €| j                  €t        d«      ‚| j                  xs t        j                  j                  d«      | _        |j                  «       | _        | j                  j                  j                  d| j                  › �ddœ«       | j                  S )Nr   ÚJINA_API_KEYz}JINA_API_KEY not set. Either set it in your environment or                 pass it as `api_key` argument to the JinaReranker.zBearer Úidentity)ÚAuthorizationzAccept-Encoding)
ÚrequestsÚosÚenvironÚgetr   Ú
ValueErrorÚSessionÚ_sessionÚheadersÚupdate)r   r   s     r   Ú_clientzJinaReranker._client3   sš   € ãä�:‰:�>‰>˜.Ó)Ð1°d·l±lÐ6JÜðDóð ð —|‘|ÒE¤r§z¡z§~¡~°nÓ'EˆŒØ ×(Ñ(Ó*ˆŒØ�‰×Ñ×$Ñ$Ø '¨¯© ~Ð6È:ÑVô	
ð �}‰}Ðr   Ú
result_setÚqueryc           
      óD  — | j                  |«      }t        |«      dk(  r|S || j                     j                  «       }| j                  j                  t        ||| j                  | j                  dœ¬«      j                  «       }d|vrt        |d   «      ‚|d   }t        t        |D �cg c]  }|d   |d   f‘Œ c}Ž «      \  }}|j                  t        |«      «      }|j                  dt        j                   |t        j"                  «       ¬	«      «      }|S c c}w )
Nr   )r'   Ú	documentsÚmodelr   )ÚjsonÚresultsÚdetailÚindexÚrelevance_scoreÚ_relevance_score)Útype)Ú_handle_empty_resultsÚlenr
   Ú	to_pylistr%   ÚpostÚAPI_URLr	   r   r+   ÚRuntimeErrorÚlistÚzipÚtakeÚappend_columnÚpaÚarrayÚfloat32)	r   r&   r'   ÚdocsÚresponser,   ÚresultÚindicesÚscoress	            r   Ú_rerankzJinaReranker._rerankC   s  € Ø×/Ñ/°
Ó;ˆ
Üˆz‹?˜aÒØÐØ˜$Ÿ+™+Ñ&×0Ñ0Ó2ˆØ—<‘<×$Ñ$ÜàØ!ØŸ™ØŸ™ñ	ð %ó 
÷ ‰$‹&ð 	ð ˜HÑ$Ü˜x¨Ñ1Ó2Ð2à˜9Ñ%ˆäÜÈWÖUÀ6�6˜'‘? FÐ+<Ñ$=Ò>ÒUÐVó
‰ˆ�ð  —_‘_¤T¨'£]Ó3ˆ
à×-Ñ-Ø¤§¡¨´b·j±j³lÔ Có
ˆ
ð Ðùò V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_resultsrD   Ú_keep_relevance_score)r   r'   rE   rF   Úcombined_resultss        r   Úrerank_hybridzJinaReranker.rerank_hybrida   sl   € ð �:‰:˜ÒØ#×:Ñ:¸>È;ÓWÑà#×1Ñ1°.À+ÓNÐØŸ<™<Ð(8¸%Ó@ÐØ�:‰:˜Ò$Ø#×9Ñ9Ð:JÓKÐàÐr   c                 ól   — | j                  ||«      }| j                  dk(  r|j                  dg«      }|S )NrI   Ú	_distance©rD   rJ   Údrop_columns)r   r'   rE   s      r   Úrerank_vectorzJinaReranker.rerank_vectorq   s6   € ØŸ™ n°eÓ<ˆØ�:‰:˜Ò$Ø+×8Ñ8¸+¸ÓGˆNØÐr   c                 ól   — | j                  ||«      }| j                  dk(  r|j                  dg«      }|S )NrI   Ú_scorerR   )r   r'   rF   s      r   Ú
rerank_ftszJinaReranker.rerank_ftsw   s6   € Ø—l‘l ;°Ó6ˆØ�:‰:˜Ò$Ø%×2Ñ2°H°:Ó>ˆKØÐr   )z"jina-reranker-v2-base-multilingualÚtextNrI   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   Úintr   r   r   r%   r<   ÚTablerD   rO   rT   rW   Ú__classcell__)r   s   @r   r   r      sÝ   ø„ ñð& ?ØØ"&Ø Ø$(ñàðð ðð �S˜$�YÑð	ð �s˜D�yÑ!õò=ð ñó ðð "§(¡(ð °3ó ð< àð ð Ÿ™ð ð —X‘Xó	 ð  3ð ¸¿¹ó ð ð °"·(±(÷ r   r   )r   Ú	functoolsr   Útypingr   Úpyarrowr<   Úbaser   r6   r   © r   r   ú<module>rf      s)   ðó
 
Ý %Ý ã å à
)€ôk�8õ kr   