
    7|h                        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     f/var/www/html/test/engine/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)zLoad 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NN "    LLN 	KK3B489!LLN		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)zCompute 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   	 =(*
(	+0H(YY%%'Fzz<DJJ   F$U!4 14%&d;djj/01 !%		 1 12F G&008FNN% zz$++.    +;%%b) JJs1v.E**U>%:;C%%c*+ LLN[  	- 	\  	KK3B489!LLN		s/   E+ EF +	F4F  F	G=GGc                ,    | j                  |g      d   S )zCompute 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     ##TF+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   