§
    šŠtjü  ã                  óê   — 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 d dlmZmZ erd dlmZ  ej        e¦  «        Z	  edd	d
dd¬¦  «         G d„ dee¦  «        ¦   «         ZdS )é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚDictÚListÚOptional)Ú
deprecated)Ú
Embeddings)Ú	BaseModelÚ
ConfigDict)Ú
Connectionz0.3.30z1.0zôThis class is deprecated and will be removed in a future release. Instead, please use `OracleEmbeddings` from the `langchain-oracledb` package. For more information, refer to <https://github.com/oracle/langchain-oracle/tree/main/libs/oracledb>.z;from langchain_oracledb.embeddings import OracleEmbeddings;F)ÚsinceÚremovalÚmessageÚalternativeÚpendingc                  ó”   ‡ — 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]ÚproxyÚkwargsc                ó:   •—  t          ¦   «         j        di |¤Ž d S )N© )ÚsuperÚ__init__)Úselfr   Ú	__class__s     €úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/embeddings/oracleai.pyr   zOracleEmbeddings.__init__2   s&   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ð"Ð"ó    Úforbid)Úextrar   ÚdirÚstrÚ	onnx_fileÚ
model_nameÚreturnÚNonec                óf  — 	 | �|�|�|€t          d¦  «        ‚|                      ¦   «         }|                     d|||¬¦  «         |                     ¦   «          dS # t           $ rJ}t                               d|› �¦  «         t          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   r#   r%   r&   r/   Úexs         r   Úload_onnx_modelz OracleEmbeddings.load_onnx_model@   sÌ   € ð	Øˆ|˜s˜{¨iÐ.?À:ÐCUÝ Ñ0Ô0Ð0à—[’[‘]”]ˆFØ�NŠNðð Ø"Ø ð ñ ô ð ð �LŠL‰NŒNˆNˆNˆNøåð 	ð 	ð 	Ý�KŠKÐ8°BÐ8Ð8Ñ9Ô9Ð9ÝÔÑ!Ô!Ð!Ø�LŠL‰NŒNˆNØøøøøð		øøøs   ‚AA Á
B0Á&AB+Â+B0Útextsú	List[str]úList[List[float]]c                óÜ  — 	 ddl }n"# t          $ r}t          d¦  «        |‚d}~ww xY w|€dS g }	 d|j        _        | j                             ¦   «         }| j        r|                     d| j        ¬¦  «         g }t          |d¬¦  «        D ]1\  }}||d	œ}	| 	                    t          j        |	¦  «        ¦  «         Œ2| j                             d
¦  «        }
|
                     |¦  «        }|                     d|t          j        | j        ¦  «        ¬¦  «         |D ]c}|€| 	                    g ¦  «         Œt          j        |d         ¦  «        }t          j        |d         ¦  «        }| 	                    |¦  «         Œd|                     ¦   «          |S # t"          $ rJ}t$                               d|› �¦  «         t)          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   r0   Ú	enumerateÚappendÚjsonÚdumpsÚgettypeÚ	newobjectr   Úloadsr1   r.   r2   r3   r4   r5   )r   r8   rB   ÚeÚ
embeddingsr/   ÚchunksÚiÚtextÚchunkÚvector_array_typeÚinputsÚrowÚrdataÚvecr6   s                   r   Úembed_documentsz OracleEmbeddings.embed_documentsg   s5  € ð	ØˆOˆOˆOˆOøÝð 	ð 	ð 	Ýð-ñô ð ðøøøøð	øøøð ˆ=Ø�4à(*ˆ
ð(	à+0ˆHÔÔ(Ø”Y×%Ò%Ñ'Ô'ˆFàŒzð Ø—’Ø<ÀDÄJð ñ ô ð ð ˆFÝ$ U°!Ð4Ñ4Ô4ð 1ð 1‘��4Ø%&°dÐ;Ð;�Ø—’�dœj¨Ñ/Ô/Ñ0Ô0Ð0Ð0à $¤	× 1Ò 1Ð2FÑ GÔ GÐØ&×0Ò0°Ñ8Ô8ˆFØ�NŠNð%ð Ý”z $¤+Ñ.Ô.ð ñ ô ð ð ð +ð +�Ø�;Ø×%Ò% bÑ)Ô)Ð)Ð)å œJ s¨1¤vÑ.Ô.�Eåœ* U¨>Ô%:Ñ;Ô;�CØ×%Ò% cÑ*Ô*Ð*Ð*à�LŠL‰NŒNˆNØÐøÝð 	ð 	ð 	Ý�KŠKÐ8°BÐ8Ð8Ñ9Ô9Ð9ÝÔÑ!Ô!Ð!Ø�LŠL‰NŒNˆNØøøøøð		øøøs)   ‚ ‡
&‘!¡&°E&F Æ
G+Æ!AG&Ç&G+rQ   úList[float]c                ó:   — |                       |g¦  «        d         S )z£Compute query embedding using an OracleEmbeddings.
        Args:
            text: The text to embed.
        Returns:
            Embedding for the text.
        r   )rX   )r   rQ   s     r   Úembed_queryzOracleEmbeddings.embed_query¥   s   € ð ×#Ò# T FÑ+Ô+¨AÔ.Ð.r    )r   r   )
r   r   r#   r$   r%   r$   r&   r$   r'   r(   )r8   r9   r'   r:   )rQ   r$   r'   rY   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   Úmodel_configÚstaticmethodr7   rX   r[   Ú__classcell__)r   s   @r   r   r      sè   ø€ € € € € € ð ÐàØ€DÐÐÐÑØØÐÐÑØØ€EÐÐÐÑð#ð #ð #ð #ð #ð #ð �:Øðñ ô €Lðð ð$ð $ð $ñ „\ð$ðL<ð <ð <ð <ð|/ð /ð /ð /ð /ð /ð /ð /r    r   )Ú
__future__r   rH   Úloggingr4   Útypingr   r   r   r   r   Úlangchain_core._apir	   Úlangchain_core.embeddingsr
   Úpydanticr   r   rB   r   Ú	getLoggerr\   r2   r   r   r    r   ú<module>rk      s@  ðð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;à *Ð *Ð *Ð *Ð *Ð *Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *àð $Ø#Ð#Ð#Ð#Ð#Ð#à	ˆÔ	˜8Ñ	$Ô	$€à ð €Ø
Øð	oð
 NØðñ ô ðD/ð D/ð D/ð D/ð D/�y *ñ D/ô D/ñô ðD/ðRð r    