Ë
    µŒj³1  ã                   ó~   — d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	m
Z
mZ dZdZdZ G d„ d	e	e«      Z G d
„ de«      Zy)é    )ÚPath)ÚAnyÚDictÚList)Ú
Embeddings)Ú	BaseModelÚ
ConfigDictÚFieldz<Represent the question for retrieving supporting documents: z9Represent this question for searching relevant passages: u9   ä¸ºè¿™ä¸ªå�¥å­�ç”Ÿæˆ�è¡¨ç¤ºä»¥ç”¨äºŽæ£€ç´¢ç›¸å…³æ–‡ç« ï¼šc                   óX  ‡ — e Zd ZU dZdZeed<   	 dZeed<   	 eed<   	  e	e
¬«      Zeeef   ed<   	  e	e
¬«      Zeeef   ed<   	 d	Zeed
<   	 defˆ fd„Zdedefd„Z	 	 	 	 	 	 d dedededededededefd„Z edd¬«      Zdee   deee      fd„Zdedee   fd„Zdedefd„Zˆ xZS )!ÚOpenVINOEmbeddingsaü  OpenVINO embedding models.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import OpenVINOEmbeddings

            model_name = "sentence-transformers/all-mpnet-base-v2"
            model_kwargs = {'device': 'CPU'}
            encode_kwargs = {'normalize_embeddings': True}
            ov = OpenVINOEmbeddings(
                model_name_or_path=model_name,
                model_kwargs=model_kwargs,
                encode_kwargs=encode_kwargs
            )
    NÚov_modelÚ	tokenizerÚmodel_name_or_path)Údefault_factoryÚmodel_kwargsÚencode_kwargsFÚshow_progressÚkwargsc           	      óX  •‡— t        ‰| �  di |¤Ž 	 ddlm} 	 ddlmŠ 	 ddt        dt        d	t        d
t        fˆfd„} || j                  «      r/ |j                  | j                  fddi| j                  ¤Ž| _        n, |j                  | j                  fi | j                  ¤Ž| _        	 ddlm} |j                  | j                  «      | _        y# t        $ r}t	        d«      |‚d}~ww xY w# t        $ r}t	        d«      |‚d}~ww xY w# t        $ r}t	        d«      |‚d}~ww xY w)ú$Initialize the sentence_transformer.r   )ÚOVModelForFeatureExtractionznCould not import optimum-intel python package. Please install it with: pip install -U 'optimum[openvino,nncf]'N)ÚHfApizjCould not import huggingface_hub python package. Please install it with: `pip install -U huggingface_hub`.Úmodel_idÚrevisionÚ	subfolderÚreturnc                 ó  •— t        | «      }|�||z  }|j                  «       r*|dz  j                  «        xs |dz  j                  «        S  ‰
«       }	 |j                  | |xs d¬«      }|€d nt        |«      j	                  «       }|j
                  D �cg c]+  }|�|j                  j                  |«      r|j                  ‘Œ- }}|€dn|› d�}	|	|vxs |	j                  dd«      |vS c c}w # t        $ r Y yw xY w)	Nzopenvino_model.xmlzopenvino_model.binÚmain)r   z/openvino_model.xmlz.xmlz.binT)
r   Úis_dirÚexistsÚ
model_infoÚas_posixÚsiblingsÚ	rfilenameÚ
startswithÚreplaceÚ	Exception)r   r   r   Ú	model_dirÚhf_apir!   Únormalized_subfolderÚfileÚmodel_filesÚov_model_pathr   s             €úq/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/embeddings/openvino.pyÚrequire_model_exportz9OpenVINOEmbeddings.__init__.<locals>.require_model_exportE   sI  ø€ ô ˜X›ˆIØÐ$Ø%¨	Ñ1�	Ø×ÑÔ!à"Ð%9Ñ9×AÑAÓCÐCò GØ%Ð(<Ñ<×DÑDÓFÐFðñ “WˆFðØ#×.Ñ.¨xÀ(ÒBTÈfÐ.ÓU�
à%Ð-‘D´4¸	³?×3KÑ3KÓ3Mð %ð
 !+× 3Ò 3óá 3˜Ø+Ð3Ø—~‘~×0Ñ0Ð1EÔFð —N“NØ 3ð ð ð !Ð(ñ )à0Ð1Ð1DÐEð ð "¨Ð4ò PØ$×,Ñ,¨V°VÓ<ÀKÐOðùòøô ò Ùðús%   ÁAC2 Â0C-Ã$C2 Ã-C2 Ã2	C>Ã=C>ÚexportT)ÚAutoTokenizerzQUnable to import transformers, please install with `pip install -U transformers`.© )NN)ÚsuperÚ__init__Úoptimum.intel.openvinor   ÚImportErrorÚhuggingface_hubr   Ústrr   Úboolr   Úfrom_pretrainedr   r   Útransformersr1   r   )Úselfr   r   Úer/   r1   r   Ú	__class__s         @€r.   r4   zOpenVINOEmbeddings.__init__/   s`  ù€ ä‰ÑÑ"˜6Ò"ð	ÝJð	Ý-ð CGñ!	Üð!	Ü%(ð!	Ü<?ð!	äõ!	ñF   × 7Ñ 7Ô8àGÐ7×GÑGØ×'Ñ'ñØ04ðØ8<×8IÑ8IñˆD�Mð
 HÐ7×GÑGØ×'Ñ'ñØ+/×+<Ñ+<ñˆDŒMð	Ý2ð '×6Ñ6°t×7NÑ7NÓOˆ�øôK ò 	Üð:óð ð	ûð	ûô ò 	Üð4óð ð	ûð	ûôn ò 	Üð1óð ðûð	úsF   “C šC2 Â.D Ã	C/ÃC*Ã*C/Ã2	DÃ;DÄDÄ	D)ÄD$Ä$D)Útextr   c                 ó8  — t        |t        «      r+t        t        t	        |j                  «       «      «      «      S t        |d«      syt        |«      dk(  st        |d   t        «      rt        |«      S t        |D �cg c]  }t        |«      ‘Œ c}«      S c c}w )zé
        Help function to get the length for the input text. Text can be either
        a list of ints (which means a single text as input), or a tuple of list of ints
        (representing several text inputs to the model).
        Ú__len__é   r   )	Ú
isinstanceÚdictÚlenÚnextÚiterÚvaluesÚhasattrÚintÚsum)r<   r?   Úts      r.   Ú_text_lengthzOpenVINOEmbeddings._text_length|   s{   € ô �dœDÔ!Ü”tœD §¡£Ó/Ó0Ó1Ð1Ü˜˜yÔ)Øä�‹Y˜!Š^œz¨$¨q©'´3Ô7Ü�t“9Ðô ©Ó-© 1œ˜A�¨Ñ-Ó.Ð.ùÒ-s   Á>BÚ	sentencesÚ
batch_sizeÚshow_progress_barÚconvert_to_numpyÚconvert_to_tensorÚmean_poolingÚnormalize_embeddingsc                 óD  ‡— 	 ddl }	 ddlm}
 	 ddlŠdt
        dt
        d	t
        fˆfd
„}|rd}d}t        |t        «      st        |d«      s|g}d}g }|j                  |D �cg c]  }| j                  |«       ‘Œ c}«      }|D �cg c]  }||   ‘Œ	 }} |
dt        |«      |d| ¬«      D ]ÿ  }||||z    }| j                  j                  j                  d   j                  «       d   }|j                   r| j#                  |ddd¬«      }n$| j#                  |d|j%                  «       dd¬«      } | j                  di |¤Ž}|r |||d   «      }n|d   dd…df   }|r(‰j&                  j(                  j+                  |dd¬«      }|r|j-                  «       }|j/                  |«       �Œ |j                  |«      D �cg c]  }||   ‘Œ	 }}|r.t        |«      r‰j1                  |«      }n@‰j3                  «       }n/|r-|j5                  |D �cg c]  }|j                  «       ‘Œ c}«      }|r|d   }|S # t        $ r}	t        d«      |	‚d}	~	ww xY w# t        $ r}	t        d«      |	‚d}	~	ww xY w# t        $ r}	t        d«      |	‚d}	~	ww xY wc c}w c c}w c c}w c c}w )aw  
        Computes sentence embeddings.

        :param sentences: the sentences to embed.
        :param batch_size: the batch size used for the computation.
        :param show_progress_bar: Whether to output a progress bar.
        :param convert_to_numpy: Whether the output should be a list of numpy vectors.
        :param convert_to_tensor: Whether the output should be one large tensor.
        :param mean_pooling: Whether to pool returned vectors.
        :param normalize_embeddings: Whether to normalize returned vectors.

        :return: By default, a 2d numpy array with shape [num_inputs, output_dimension].
        r   NzCUnable to import numpy, please install with `pip install -U numpy`.)ÚtrangezAUnable to import tqdm, please install with `pip install -U tqdm`.zCUnable to import torch, please install with `pip install -U torch`.Úmodel_outputÚattention_maskr   c                 óö   •— | d   }|j                  d«      j                  |j                  «       «      j                  «       }‰j	                  ||z  d«      ‰j                  |j	                  d«      d¬«      z  S )Nr   éÿÿÿÿrB   g•Ö&è.>)Úmin)Ú	unsqueezeÚexpandÚsizeÚfloatrK   Úclamp)rW   rX   Útoken_embeddingsÚinput_mask_expandedÚtorchs       €r.   Úrun_mean_poolingz3OpenVINOEmbeddings.encode.<locals>.run_mean_pooling¸   sˆ   ø€ Ø+Øñ Ðð ×(Ñ(¨Ó,×3Ñ3Ð4D×4IÑ4IÓ4KÓL×RÑRÓTð  ð —9‘9Ð-Ð0CÑCÀQÓGÈ%Ï+É+Ø#×'Ñ'¨Ó*°ð KVó Kñ ð ó    FrA   TÚBatches)ÚdescÚdisablerB   Úpt)ÚpaddingÚ
truncationÚreturn_tensorsÚ
max_length)rj   rm   rk   rl   é   )ÚpÚdimr2   )Únumpyr6   ÚtqdmrV   rc   r   rC   r8   rI   ÚargsortrM   rE   r   ÚrequestÚinputsÚget_partial_shapeÚ
is_dynamicr   Ú
get_lengthÚnnÚ
functionalÚ	normalizeÚcpuÚextendÚstackÚTensorÚasarray)r<   rN   rO   rP   rQ   rR   rS   rT   Únpr=   rV   rd   Úinput_was_stringÚall_embeddingsÚsenÚlength_sorted_idxÚidxÚsentences_sortedÚstart_indexÚsentences_batchÚlengthÚfeaturesÚout_featuresÚ
embeddingsÚembrc   s                            @r.   ÚencodezOpenVINOEmbeddings.encodeŽ   sï  ø€ ð.	Ûð
	Ý#ð
	Ûð		¬3ð 		Äð 		Ìõ 		ñ Ø$Ðà ÐÜ�i¤Ô%¬WØ�yô.
ð #˜ˆIØ#Ðà ˆØŸJ™JÉ9Ó'UÉ9ÀC¨×):Ñ):¸3Ó)?Ò(?È9Ñ'UÓVÐÙ6GÓHÑ6G¨s˜I c›NÐ6GÐÐHá!ØŒs�9‹~˜z°	ÐGXÐCX÷
ˆKð /¨{¸[È:Ñ=UÐVˆOà—]‘]×*Ñ*×1Ñ1°!Ñ4×FÑFÓHÈÑKˆFØ× Ò ØŸ>™>Ø#¨T¸dÐSWð *ó ‘ð  Ÿ>™>Ø#Ø(Ø%×0Ñ0Ó2Ø#Ø#'ð *ó �ð )˜4Ÿ=™=Ñ4¨8Ñ4ˆLÙÙ-¨l¸HÐEUÑ<VÓW‘
à)¨!™_ªQ°¨TÑ2�
Ù#Ø"ŸX™X×0Ñ0×:Ñ:¸:ÈÐPQÐ:ÓR�
ñ  Ø'Ÿ^™^Ó-�
à×!Ñ! *Ö-ð?
ðB :<¿¹ÐDUÔ9VÓWÑ9V°#˜.¨Ó-Ð9VˆÐWáÜ�>Ô"Ø!&§¡¨^Ó!<‘à!&§¡£‘ÙØŸZ™ZÁÓ(OÁ¸¨¯©­ÀÑ(OÓPˆNáØ+¨AÑ.ˆNàÐøôq ò 	ÜØUóàðûð	ûô ò 	ÜØSóàðûð	ûô ò 	ÜØUóàðûð	üò6 (VùÚHùòF Xùò )Ps]   ƒH7 ˆI �I1 Á#JÂJÇJÈJÈ7	IÉ IÉIÉ	I.ÉI)É)I.É1	JÉ:JÊJÚforbidr2   )ÚextraÚprotected_namespacesÚtextsc                 ó    — t        t        d„ |«      «      } | j                  |fd| j                  i| j                  ¤Ž}|j                  «       S )úÉCompute doc embeddings using a HuggingFace transformer model.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        c                 ó&   — | j                  dd«      S )NÚ
Ú )r&   )Úxs    r.   Ú<lambda>z4OpenVINOEmbeddings.embed_documents.<locals>.<lambda>  s   €  1§9¡9¨T°3Ô#7re   rP   )ÚlistÚmapr�   r   r   Útolist)r<   r“   r�   s      r.   Úembed_documentsz"OpenVINOEmbeddings.embed_documents  sV   € ô ”SÑ7¸Ó?Ó@ˆØ �T—[‘[Øñ
Ø%)×%7Ñ%7ð
Ø;?×;MÑ;Mñ
ˆ
ð × Ñ Ó"Ð"re   c                 ó,   — | j                  |g«      d   S )ú³Compute query embeddings using a HuggingFace transformer model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   )rž   )r<   r?   s     r.   Úembed_queryzOpenVINOEmbeddings.embed_query  s   € ð ×#Ñ# T FÓ+¨AÑ.Ð.re   Ú
model_pathc                 ó¤   — | j                   j                  «        | j                   j                  |«       | j                  j                  |«       y)NT)r   ÚhalfÚsave_pretrainedr   )r<   r¢   s     r.   Ú
save_modelzOpenVINOEmbeddings.save_model  s;   € ð 	�‰×ÑÔØ�‰×%Ñ% jÔ1Ø�‰×&Ñ& zÔ2Øre   )é   FTFFT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__annotations__r   r8   r
   rD   r   r   r   r   r9   r4   rJ   rM   r�   r	   Úmodel_configr   r_   rž   r¡   r¦   Ú__classcell__©r>   s   @r.   r   r      s_  ø… ñð" €HˆcÓØ Ø€IˆsÓØ(ØÓØÙ#(¸Ô#>€L�$�s˜C�x‘.Ó>Ø1Ù$)¸$Ô$?€M�4˜˜S˜‘>Ó?ØRØ€M�4ÓØ)ðKP õ KPðZ/ ð /¨ó /ð* Ø"'Ø!%Ø"'Ø"Ø%)ñqàðqð ðqð  ð	qð
 ðqð  ðqð ðqð #ðqð 
óqñf  HÀ2ÔF€Lð# T¨#¡Yð #°4¸¸U¹Ñ3Dó #ð"	/ ð 	/¨¨U©ó 	/ðàðð 
÷re   r   c                   ó‚   ‡ — e Zd ZU dZeZeed<   	 dZeed<   	 de	fˆ fd„Z
dee   deee      fd	„Zd
edee   fd„Zˆ xZS )ÚOpenVINOBgeEmbeddingsaø  OpenVNO BGE embedding models.

    Bge Example:
        .. code-block:: python

            from langchain_community.embeddings import OpenVINOBgeEmbeddings

            model_name = "BAAI/bge-large-en-v1.5"
            model_kwargs = {'device': 'CPU'}
            encode_kwargs = {'normalize_embeddings': True}
            ov = OpenVINOBgeEmbeddings(
                model_name_or_path=model_name,
                model_kwargs=model_kwargs,
                encode_kwargs=encode_kwargs
            )
    Úquery_instructionÚ Úembed_instructionr   c                 óX   •— t        ‰| �  di |¤Ž d| j                  v rt        | _        yy)r   z-zhNr2   )r3   r4   r   Ú DEFAULT_QUERY_BGE_INSTRUCTION_ZHr²   )r<   r   r>   s     €r.   r4   zOpenVINOBgeEmbeddings.__init__@  s.   ø€ ä‰ÑÑ"˜6Ò"à�D×+Ñ+Ñ+Ü%EˆDÕ"ð ,re   r“   r   c                 ó¾   — |D �cg c]!  }| j                   |j                  dd«      z   ‘Œ# }} | j                  |fi | j                  ¤Ž}|j	                  «       S c c}w )r•   r—   r˜   )r´   r&   r�   r   r�   )r<   r“   rL   r�   s       r.   rž   z%OpenVINOBgeEmbeddings.embed_documentsG  s`   € ñ INÓNÉÀ1�×'Ñ'¨!¯)©)°D¸#Ó*>Ó>ÈˆÐNØ �T—[‘[ Ñ=¨$×*<Ñ*<Ñ=ˆ
Ø× Ñ Ó"Ð"ùò Os   …&Ar?   c                 óš   — |j                  dd«      } | j                  | j                  |z   fi | j                  ¤Ž}|j	                  «       S )r    r—   r˜   )r&   r�   r²   r   r�   )r<   r?   Ú	embeddings      r.   r¡   z!OpenVINOBgeEmbeddings.embed_queryT  sI   € ð �|‰|˜D #Ó&ˆØ�D—K‘K × 6Ñ 6¸Ñ =ÑTÀ×ASÑASÑTˆ	Ø×ÑÓ!Ð!re   )r¨   r©   rª   r«   Ú DEFAULT_QUERY_BGE_INSTRUCTION_ENr²   r8   r¬   r´   r   r4   r   r_   rž   r¡   r®   r¯   s   @r.   r±   r±   )  sk   ø… ñð" >Ð�sÓ=Ø1ØÐ�sÓØ4ðF õ Fð# T¨#¡Yð #°4¸¸U¹Ñ3Dó #ð" ð "¨¨U©÷ "re   r±   N)Úpathlibr   Útypingr   r   r   Úlangchain_core.embeddingsr   Úpydanticr   r	   r
   ÚDEFAULT_QUERY_INSTRUCTIONrº   r¶   r   r±   r2   re   r.   Ú<module>rÀ      sT   ðÝ ß "Ñ "å 0ß 1Ñ 1ð Cð ð @ð !ð $_Ð  ôV˜ Jô Vôr6"Ð.õ 6"re   