
    dh                        S SK Jr  S SKrS SKrS SKrS SKJrJrJrJ	r	J
r
  S SKJr  S SKJrJr  \(       a  S SKJr  \R$                  " \5      r  " S S\\5      rg)	    )annotationsN)TYPE_CHECKINGAnyDictListOptional)
Embeddings)	BaseModel
ConfigDict)
Connectionc                     ^  \ rS rSr% Sr SrS\S'    S\S'    SrS\S	'   SU 4S
 jjr\	" SS9r
 \          SS j5       rSS jrSS jrSrU =r$ )OracleEmbeddings   zGet EmbeddingsNr   connzDict[str, Any]paramszOptional[str]proxyc                &   > [         TU ]  " S0 UD6  g )N )super__init__)selfkwargs	__class__s     _/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/embeddings/oracleai.pyr   OracleEmbeddings.__init__%   s    "6"    forbid)extrac                8    U b	  Ub  Ub  Uc  [        S5      eU R                  5       nUR                  SUUUS9  UR                  5         g! [          aC  n[        R                  SU 35        [        R                  " 5         WR                  5         e SnAff = f)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_model 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                    SSK nUc  g/ n SUR                  l        U R                  R                  5       nU R                  (       a  UR                  SU R                  S9  / n[        USS9 H.  u  pxXxS	.n	UR                  [        R                  " U	5      5        M0     U R                  R                  S
5      n
U
R                  U5      nUR                  SU[        R                  " U R                  5      S9  U H\  nUc  UR                  / 5        M  [        R                  " US   5      n[        R                  " US   5      nUR                  U5        M^     UR!                  5         U$ ! [         a  n[        S5      UeSnAff = f! ["         aC  n[$        R'                  SU 35        [(        R*                  " 5         WR!                  5         e SnAff = f)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   textsr9   e
embeddingsr%   chunksitextchunkvector_array_typeinputsrowrdatavecr/   s                   r   embed_documents OracleEmbeddings.embed_documentsZ   s   	 =(*
(	+0H(YY%%'Fzz<DJJ   F$U!4%&;djj/0 5 !%		 1 12F G&008FNN% zz$++.   ;%%b) JJs1v.E**U>%:;C%%c*  LLN[  	- 	\  	KK3B489!LLN		s/   E0 E"F 0
F:FF
G>GGc                ,    U R                  U/5      S   $ )z{Compute query embedding using an OracleEmbeddings.
Args:
    text: The text to embed.
Returns:
    Embedding for the text.
r   )rP   )r   rI   s     r   embed_queryOracleEmbeddings.embed_query   s     ##TF+A..r   r   )r   r   )
r   r   r,   strr-   rU   r.   rU   returnNone)rD   z	List[str]rV   zList[List[float]])rI   rU   rV   zList[float])__name__
__module____qualname____firstlineno____doc__r   __annotations__r   r   r   model_configstaticmethodr0   rP   rS   __static_attributes____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   r9   r   	getLoggerrX   r(   r   r   r   r   <module>rh      sN    #    ; ; 0 *#			8	$ D/y* D/Rr   