Ë
    µŒj  ã                  ó®   — d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
 d dlmZ d dlmZmZ erd dlmZ  ej$                  e«      Z	  G d„ dee«      Zy)	é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚDictÚListÚOptional)Ú
Embeddings)Ú	BaseModelÚ
ConfigDict)Ú
Connectionc                  óœ   ‡ — e Zd ZU dZ	 dZded<   	 ded<   	 dZded<   dˆ fd	„Z ed
¬«      Z		 e
	 	 	 	 	 	 	 	 	 	 dd„«       Zdd„Zdd„Zˆ xZS )ÚOracleEmbeddingszGet EmbeddingsNr   ÚconnzDict[str, Any]ÚparamszOptional[str]Úproxyc                ó$   •— t        ‰| �  di |¤Ž y )N© )ÚsuperÚ__init__)ÚselfÚkwargsÚ	__class__s     €úq/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/embeddings/oracleai.pyr   zOracleEmbeddings.__init__%   s   ø€ Ü‰ÑÑ"˜6Ó"ó    Úforbid)Úextrac                ó2  — 	 | �|�|�|€t        d«      ‚| j                  «       }|j                  d|||¬«       |j                  «        y# t         $ rB}t        j                  d|› �«       t        j                  «        j                  «        ‚ d}~ww xY w)z×Load an ONNX model to Oracle Database.
        Args:
            conn: Oracle Connection,
            dir: Oracle Directory,
            onnx_file: ONNX file name,
            model_name: Name of the model.
        NzInvalid inputa†  
                begin
                    dbms_data_mining.drop_model(model_name => :model, force => true);
                    SYS.DBMS_VECTOR.load_onnx_model(:path, :filename, :model, 
                        json('{"function" : "embedding", 
                            "embeddingOutput" : "embedding", 
                            "input": {"input": ["DATA"]}}'));
                end;)ÚpathÚfilenameÚmodelúAn exception occurred :: )Ú	ExceptionÚcursorÚexecuteÚcloseÚloggerÚinfoÚ	tracebackÚ	print_exc)r   ÚdirÚ	onnx_fileÚ
model_namer#   Úexs         r   Úload_onnx_modelz OracleEmbeddings.load_onnx_model3   s˜   € ð	Øˆ|˜s˜{¨iÐ.?À:ÐCUÜ Ó0Ð0à—[‘[“]ˆFØ�N‰Nðð Ø"Ø ð ô ð �L‰L�Nøäò 	Ü�K‰KÐ3°B°4Ð8Ô9Ü×ÑÔ!Ø�L‰LŒNØûð		ús   ‚AA Á	BÁ=BÂBc                ó¬  — 	 ddl }|€yg }	 d|j                  _        | j                  j                  «       }| j                  r|j                  d| j                  ¬«       g }t        |d¬«      D ].  \  }}||d	œ}	|j                  t        j                  |	«      «       Œ0 | j                  j                  d
«      }
|
j                  |«      }|j                  d|t        j                  | j                  «      ¬«       |D ]W  }|€|j                  g «       Œt        j                  |d   «      }t        j                  |d   «      }|j                  |«       ŒY |j!                  «        |S # t        $ r}t        d«      |‚d}~ww xY w# t"        $ rB}t$        j'                  d|› �«       t)        j*                  «        j!                  «        ‚ d}~ww xY w)zÁCompute doc embeddings using an OracleEmbeddings.
        Args:
            texts: The list of texts to embed.
        Returns:
            List of embeddings, one for each input text.
        r   NzIUnable to import oracledb, please install with `pip install -U oracledb`.Fz&begin utl_http.set_proxy(:proxy); end;)r   é   )Ústart)Úchunk_idÚ
chunk_datazSYS.VECTOR_ARRAY_TzNselect t.* from dbms_vector_chain.utl_to_embeddings(:content, json(:params)) t)Úcontentr   Úembed_vectorr!   )ÚoracledbÚImportErrorÚdefaultsÚ
fetch_lobsr   r#   r   r$   Ú	enumerateÚappendÚjsonÚdumpsÚgettypeÚ	newobjectr   Úloadsr%   r"   r&   r'   r(   r)   )r   Útextsr6   ÚeÚ
embeddingsr#   ÚchunksÚiÚtextÚchunkÚvector_array_typeÚinputsÚrowÚrdataÚvecr-   s                   r   Úembed_documentsz OracleEmbeddings.embed_documentsZ   s¸  € ð	Ûð ˆ=Øà(*ˆ
ð(	à+0ˆH×ÑÔ(Ø—Y‘Y×%Ñ%Ó'ˆFà�zŠzØ—‘Ø<ÀDÇJÁJð ô ð ˆFÜ$ U°!×4‘��4Ø%&°dÑ;�Ø—‘œdŸj™j¨Ó/Õ0ð 5ð !%§	¡	× 1Ñ 1Ð2FÓ GÐØ&×0Ñ0°Ó8ˆFØ�N‰Nð%ð Ü—z‘z $§+¡+Ó.ð ô ó �Ø�;Ø×%Ñ% bÕ)ä ŸJ™J s¨1¡vÓ.�EäŸ*™* U¨>Ñ%:Ó;�CØ×%Ñ% cÕ*ð ð �L‰LŒNØÐøô[ ò 	Üð-óð ðûð	ûô\ ò 	Ü�K‰KÐ3°B°4Ð8Ô9Ü×ÑÔ!Ø�L‰LŒNØûð		ús/   ‚E+ ŒEF Å+	FÅ4F Æ FÆ	GÆ=GÇGc                ó,   — | j                  |g«      d   S )z£Compute query embedding using an OracleEmbeddings.
        Args:
            text: The text to embed.
        Returns:
            Embedding for the text.
        r   )rM   )r   rF   s     r   Úembed_queryzOracleEmbeddings.embed_query˜   s   € ð ×#Ñ# T FÓ+¨AÑ.Ð.r   )r   r   )
r   r   r*   Ústrr+   rP   r,   rP   ÚreturnÚNone)rA   z	List[str]rQ   zList[List[float]])rF   rP   rQ   zList[float])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   Úmodel_configÚstaticmethodr.   rM   rO   Ú__classcell__)r   s   @r   r   r      sŠ   ø… ÙàØ€Dˆ#ÓØØÓØØ€Eˆ=Óõ#ñ Øô€Lðð ð$Øð$Ø"ð$Ø/2ð$Ø@Cð$à	ò$ó ð$óL<÷|/r   r   )Ú
__future__r   r<   Úloggingr(   Útypingr   r   r   r   r   Úlangchain_core.embeddingsr	   Úpydanticr
   r   r6   r   Ú	getLoggerrS   r&   r   r   r   r   Ú<module>ra      sP   ðõ #ã Û Û ß ;Õ ;å 0ß *áÝ#à	ˆ×	Ñ	˜8Ó	$€à ôD/�y *ô D/ðRr   