
    Ng                        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dS )	    )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]proxykwargsc                :     t                      j        di | d S )N )super__init__)selfr   	__class__s     c/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/oracleai.pyr   zOracleEmbeddings.__init__%   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)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   r   r   r    r)   exs         r   load_onnx_modelz OracleEmbeddings.load_onnx_model3   s    	|s{i.?:CU000[[]]FNN "      LLNNNNN 	 	 	KK8B88999!!!LLNNN		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)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   r2   r<   e
embeddingsr)   chunksitextchunkvector_array_typeinputsrowrdatavecr0   s                   r   embed_documentsz OracleEmbeddings.embed_documentsZ   s5   	OOOO 	 	 	-  	 =4(*
(	+0H(Y%%''Fz <DJ     F$U!444 1 14%&d;;dj//0000 $	 1 12F G G&0088FNN% z$+..      + +;%%b)))) Js1v..E*U>%:;;C%%c****LLNNN 	 	 	KK8B88999!!!LLNNN		s)    
&!&E&F 
G+!AG&&G+rK   List[float]c                :    |                      |g          d         S )zCompute query embedding using an OracleEmbeddings.
        Args:
            text: The text to embed.
        Returns:
            Embedding for the text.
        r   )rR   )r   rK   s     r   embed_queryzOracleEmbeddings.embed_query   s     ##TF++A..r   )r   r   )
r   r   r   r   r   r   r    r   r!   r"   )r2   r3   r!   r4   )rK   r   r!   rS   )__name__
__module____qualname____doc__r   __annotations__r   r   r   model_configstaticmethodr1   rR   rU   __classcell__)r   s   @r   r   r      s         DE# # # # # # :  L $ $ $ \$L< < < <|/ / / / / / / /r   r   )
__future__r   rB   loggingr.   typingr   r   r   r   r   langchain_core.embeddingsr	   pydanticr
   r   r<   r   	getLoggerrV   r,   r   r   r   r   <module>rd      s    # " " " " "       ; ; ; ; ; ; ; ; ; ; ; ; ; ; 0 0 0 0 0 0 * * * * * * * * $######		8	$	$ D/ D/ D/ D/ D/y* D/ D/ D/R r   