Ë
    µŒjÕ<  ã                  ó4  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZmZ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 erd dlmZ  ej8                  e«      Z	  G d	„ d
e«      Z	  G d„ d«      Z 	  G d„ de«      Z! G d„ de«      Z"y)é    )ÚannotationsN)Ú
HTMLParser)ÚTYPE_CHECKINGÚAnyÚDictÚListÚOptionalÚTupleÚUnion)Ú
BaseLoader)ÚDocument)ÚTextSplitter)Ú
Connectionc                  ó<   ‡ — e Zd ZdZdˆ fd„Zdd„Zdd„Zd	d„Zˆ xZS )
ÚParseOracleDocMetadatazParse Oracle doc metadata...c                ó^   •— t         ‰| �  «        | j                  «        d| _        i | _        y )NF)ÚsuperÚ__init__ÚresetÚmatchÚmetadata)ÚselfÚ	__class__s    €úw/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/document_loaders/oracleai.pyr   zParseOracleDocMetadata.__init__%   s%   ø€ Ü‰ÑÔØ�
‰
ŒØˆŒ
Ø(*ˆ�ó    c                ó€   — |dk(  r,d}|D ]$  \  }}|dk(  r|}|dk(  sŒ|sŒ|| j                   |<   Œ& y |dk(  rd| _        y y )NÚmetaÚ ÚnameÚcontentÚtitleT)r   r   )r   ÚtagÚattrsÚentryr   Úvalues         r   Úhandle_starttagz&ParseOracleDocMetadata.handle_starttag+   sV   € Ø�&Š=Ø#%ˆEÛ$‘��eØ˜6’>Ø!�EØ˜9Ó$ÚØ/4˜Ÿ™ eÒ,ñ  %ð �GŠ^ØˆD�Jð r   c                óJ   — | j                   r|| j                  d<   d| _         y y )Nr!   F)r   r   )r   Údatas     r   Úhandle_dataz"ParseOracleDocMetadata.handle_data7   s#   € Ø�:Š:Ø%)ˆD�M‰M˜'Ñ"ØˆD�Jð r   c                ó   — | j                   S ©N)r   )r   s    r   Úget_metadataz#ParseOracleDocMetadata.get_metadata<   s   € Ø�}‰}Ðr   )ÚreturnÚNone)r"   Ústrr#   zList[Tuple[str, Optional[str]]]r-   r.   )r(   r/   r-   r.   )r-   úDict[str, Any])	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r&   r)   r,   Ú__classcell__©r   s   @r   r   r   "   s   ø„ Ù&õ+ó
ó÷
r   r   c                  óF   — e Zd ZdZeddd„«       Ze	 	 	 	 	 	 	 	 dd„«       Zy)ÚOracleDocReaderzRead a fileNc                óÞ  — d}d}| €&dj                  t        j                  dd¬«      «      } t        t	        j                  «       «      }t        j                  d|«      }t        j                  | j                  «       «      j                  «       }|d | }t        j                  dt        j                  d«      «      }||z   |z   }|j                  «       }|j                  |«      }|d | }|S )Né    é   r   Ú>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789é   )Úkz>I)ÚjoinÚrandomÚchoicesÚintÚtimeÚstructÚpackÚhashlibÚsha256ÚencodeÚdigestÚgetrandbitsÚhexÚzfill)	Úinput_stringÚ
out_lengthÚhash_lenÚ	timestampÚtimestamp_binÚhashval_binÚcounter_binÚ	object_idÚobject_id_hexs	            r   Úgenerate_object_idz"OracleDocReader.generate_object_idF   sâ   € àˆ
ØˆàÐØŸ7™7Ü—‘ØTØôóˆLô œŸ	™	›Ó$ˆ	ÜŸ™ D¨)Ó4ˆô —n‘n \×%8Ñ%8Ó%:Ó;×BÑBÓDˆØ! ) 8Ð,ˆô —k‘k $¬×(:Ñ(:¸2Ó(>Ó?ˆð " KÑ/°+Ñ=ˆ	Ø!Ÿ™›ˆØ%×+Ñ+Øó
ˆð & k zÐ2ˆàÐr   c                ó4  — i }	 ddl }	 d|j                  _        | j	                  «       }t        |d«      5 }|j                  «       }ddd«       €t        d|¬«      S |j                  |j                  «      }	|j                  |j                  «      }
|j                  d|t        j                  |«      |	|
¬	«       |j                  «        |	€i }nft        |	j                  «       «      }|j!                  d
«      s|j!                  d«      r+t#        «       }|j%                  |«       |j'                  «       }t(        j+                  | j,                  dz   |z   «      }||d<   ||d<   |
€t        d|¬«      S t        t        |
j                  «       «      |¬«      S # t        $ r}t        d«      |‚d}~ww xY w# 1 sw Y   �ŒrxY w# t.        $ rJ}t0        j3                  d|› �«       t0        j3                  d|› �«       j                  «        Y d}~yd}~ww xY w)zóRead a file using OracleReader
        Args:
            conn: Oracle Connection,
            file_path: Oracle Directory,
            params: ONNX file name.
        Returns:
            Plain text and metadata as Langchain Document.
        r   NúIUnable to import oracledb, please install with `pip install -U oracledb`.FÚrbr   ©Úpage_contentr   a  
                declare
                    input blob;
                begin
                    input := :blob;
                    :mdata := dbms_vector_chain.utl_to_text(input, json(:pref));
                    :text := dbms_vector_chain.utl_to_text(input);
                end;)ÚblobÚprefÚmdataÚtextú<!DOCTYPE htmlú<HTML>Ú$Ú_oidÚ_fileúAn exception occurred :: zSkip processing )ÚoracledbÚImportErrorÚdefaultsÚ
fetch_lobsÚcursorÚopenÚreadr   ÚvarÚDB_TYPE_CLOBÚexecuteÚjsonÚdumpsÚcloser/   ÚgetvalueÚ
startswithr   Úfeedr,   r8   rV   ÚusernameÚ	ExceptionÚloggerÚinfo)ÚconnÚ	file_pathÚparamsr   rf   Úerj   Úfr(   r^   r_   Údoc_dataÚpÚdoc_idÚexs                  r   Ú	read_filezOracleDocReader.read_filei   sð  € ð $&ˆð	Ûð4	Ø+0ˆH×ÑÔ(Ø—[‘[“]ˆFä�i Ô&¨!Ø—v‘v“x�÷ 'ð ˆ|Ü¨R¸(ÔCÐCà—J‘J˜x×4Ñ4Ó5ˆEØ—:‘:˜h×3Ñ3Ó4ˆDØ�N‰Nðð Ü—Z‘Z Ó'ØØð ô ð �L‰LŒNàˆ}Ø‘ä˜uŸ~™~Ó/Ó0�Ø×&Ñ&Ð'7Ô8¸H×<OÑ<OØô=ô /Ó0�AØ—F‘F˜8Ô$Ø Ÿ~™~Ó/�Hä$×7Ñ7¸¿¹ÈÑ8KÈiÑ8WÓXˆFØ%ˆH�VÑØ )ˆH�WÑàˆ|Ü¨R¸(ÔCÐCä¬S°·±³Ó-AÈHÔUÐUøôg ò 	Üð-óð ðûð	ú÷ 'Ñ&ûôX ò 	Ü�K‰KÐ3°B°4Ð8Ô9Ü�K‰KÐ*¨9¨+Ð6Ô7Ø�L‰LŒNÜûð		úsS   „F ‰-G ¶F7ÁG ÁDG Å6#G Æ	F4Æ#F/Æ/F4Æ7GÆ<G Ç	HÇA HÈHr+   )rM   zUnion[str, None]r-   r/   )rz   r   r{   r/   r|   Údictr-   zUnion[Document, None])r1   r2   r3   r4   ÚstaticmethodrV   rƒ   © r   r   r8   r8   C   sR   „ Ùàó ó ð ðD ðHØðHØ%(ðHØ26ðHà	òHó ñHr   r8   c                  ó,   ‡ — e Zd ZdZdˆ fd„Zdd„Zˆ xZS )ÚOracleDocLoaderzwRead documents using OracleDocLoader
    Args:
        conn: Oracle Connection,
        params: Loader parameters.
    c                óŒ   •— || _         t        j                  t        j                  |«      «      | _        t        ‰| �  di |¤Ž y )Nr†   )rz   rp   Úloadsrq   r|   r   r   )r   rz   r|   Úkwargsr   s       €r   r   zOracleDocLoader.__init__¿   s3   ø€ ØˆŒ	Ü—j‘j¤§¡¨FÓ!3Ó4ˆŒÜ‰ÑÑ"˜6Ó"r   c           	     óÔ  — 	 ddl }d}g }i }ddi}	 | j                  �¡| j                  j                  d«      | _        | j                  j                  d«      | _        | j                  j                  d«      | _        | j                  j                  d	«      | _        | j                  j                  d
«      | _        nt        d«      ‚d|j                  _        | j                  r@t        j                  | j                  | j                  |«      }|€|S |j                  |«       | j
                  rÃd}t!        j"                  | j
                  «      D ]Ÿ  }	t         j$                  j'                  | j
                  |	«      }
t         j$                  j)                  |
«      sŒMt        j                  | j                  |
|«      }|€|dz   }t*        j-                  d|› d�«       Œ�|j                  |«       Œ¡ | j                  �r½	 | j                  �| j                  €t        d«      ‚| j                  j/                  «       }| j                  j                  d«      | _        | j0                  �¤t3        | j0                  «      dkD  rt        d«      ‚d}|j5                  || j                  j7                  «       | j                  j7                  «       ¬«       |j9                  «       }|D ]&  }|d   | j0                  v sŒ|d   dvsŒt        d«      ‚ d| _        | j0                  �(| j0                  D ]  }| j:                  dz   |z   | _        Œ d| j                  z   dz   t=        j>                  |«      z   dz   | j                  z   dz   | j:                  z   dz   | j                  z   dz   | j                  z   d z   }|j5                  |«       |D �]ï  }i }|€{t        jA                  | j                  jB                  d!z   | j                  z   d!z   | j                  z   d!z   | j                  z   «      }||d"<   |j                  tE        d#|¬$«      «       Œƒ|d   �[tG        |d   «      }|jI                  d%«      s|jI                  d&«      r+tK        «       }|jM                  |«       |jO                  «       }t        jA                  | j                  jB                  d!z   | j                  z   d!z   | j                  z   d!z   | j                  z   d!z   tG        |d'   «      z   «      }||d"<   |d'   |d(<   | j0                  �t3        | j0                  «      }tQ        d|«      D ]  }||d'z      || j0                  |   <   Œ |d   €|j                  tE        d#|¬$«      «       �ŒÈ|j                  tE        tG        |d   «      |¬$«      «       �Œò 	 |S |S # t        $ r}t        d«      |‚d}~ww xY w# t        $ rB}t*        j-                  d)|› �«       tS        jT                  «        jW                  «        ‚ d}~ww xY w# t        $ r2}t*        j-                  d)|› �«       tS        jT                  «        ‚ d}~ww xY w)*z,Load data into LangChain Document objects...r   NrX   Ú	plaintextÚfalseÚfileÚdirÚownerÚ	tablenameÚcolnamezMissing loader parametersFé   zTotal skipped: Ú
z%Missing owner or column name or both.Ú
mdata_colsé   z?Exceeds the max number of columns you can request for metadata.zgselect column_name, data_type from all_tab_columns where owner = :ownername and table_name = :tablename)Ú	ownernamer’   )ÚNUMBERÚBINARY_DOUBLEÚBINARY_FLOATÚLONGÚDATEÚ	TIMESTAMPÚVARCHAR2zDThe datatype for the column requested for metadata is not supported.z, rowidz, z'select dbms_vector_chain.utl_to_text(t.z, json('z+')) mdata, dbms_vector_chain.utl_to_text(t.z) textz from Ú.z trb   rc   r   rZ   r`   ra   é   Ú_rowidre   ),rf   rg   r|   Úgetr�   r�   r‘   r’   r“   rw   rh   ri   r8   rƒ   rz   ÚappendÚosÚlistdirÚpathr?   Úisfilerx   ry   rj   r–   Úlenro   ÚupperÚfetchallÚmdata_cols_sqlrp   rq   rV   rv   r   r/   rt   r   ru   r,   ÚrangeÚ	tracebackÚ	print_excrr   )r   rf   r}   ÚncolsÚresultsr   Úm_paramsÚdocÚ
skip_countÚ	file_namer{   rj   ÚsqlÚrowsÚrowÚcolr�   r(   r€   Úir‚   s                        r   ÚloadzOracleDocLoader.loadÄ   s'  € ð	Ûð ˆØ"$ˆØ#%ˆØ Ð)ˆðg	à�{‰{Ð&Ø ŸK™KŸO™O¨FÓ3�”	ØŸ;™;Ÿ?™?¨5Ó1�”Ø!Ÿ[™[Ÿ_™_¨WÓ5�”
Ø!%§¡§¡°Ó!=�”Ø#Ÿ{™{Ÿ™¨yÓ9�•äÐ ;Ó<Ð<à+0ˆH×ÑÔ(à�yŠyÜ%×/Ñ/°·	±	¸4¿9¹9ÀhÓO�à�;Ø"�Nà—‘˜sÔ#à�xŠxØ�
Ü!#§¡¨D¯H©HÖ!5�IÜ "§¡§¡¨T¯X©X°yÓ A�IÜ—w‘w—~‘~ iÕ0Ü-×7Ñ7¸¿	¹	À9ÈhÓW˜à˜;Ø)3°a©˜JÜ"ŸK™K¨/¸*¸ÀRÐ(HÕIà#ŸN™N¨3Õ/ð "6ð �~‹~ð~Ø—z‘zÐ)¨T¯\©\Ð-AÜ'Ð(OÓPÐPà!ŸY™Y×-Ñ-Ó/�FØ&*§k¡k§o¡o°lÓ&C�D”OØ—‘Ð2Ü˜tŸ™Ó/°!Ò3Ü"+ð!Bó#ð ð8ð ð
 Ÿ™ØØ&*§j¡j×&6Ñ&6Ó&8Ø&*§n¡n×&:Ñ&:Ó&<ð 'ô ð  &Ÿ™Ó0˜Û#'˜CØ" 1™v¨¯©Ò8Ø#& q¡6ð 2"ò $"ô +4ð)Kó+&ð %&ð $(ð  +4�DÔ'Ø—‘Ð2Ø#'§?¤?˜CØ26×2EÑ2EÈÑ2LÈsÑ2R˜DÕ/ð $3ð
 BØŸ,™,ñ'à$ñ%ô Ÿ*™* XÓ.ñ/ð Hñ	Hð
 Ÿ,™,ñ'ð #ñ#ð ×-Ñ-ñ.ð #ñ#ð Ÿ*™*ñ	%ð ñ
ð Ÿ.™.ñ)ð ñð ð  —N‘N 3Ô'Ü%˜Ø#%˜à˜;Ü%4×%GÑ%GØ $§	¡	× 2Ñ 2Ø"%ñ!&à"&§*¡*ñ!-ð #&ñ!&ð #'§.¡.ñ	!1ð
 #&ñ!&ð #'§,¡,ñ!/ó&˜Fð 06˜H VÑ,Ø#ŸN™N¬8ÀÈhÔ+WÕXà" 1™vÐ1Ü'*¨3¨q©6£{ Ø#'§?¡?Ð3CÔ#DÈÏÉØ$,ôI"ô )?Ó(@ AØ$%§F¡F¨4¤LØ/0¯~©~Ó/? Hä%4×%GÑ%GØ $§	¡	× 2Ñ 2Ø"%ñ!&à"&§*¡*ñ!-ð #&ñ!&ð #'§.¡.ñ	!1ð
 #&ñ!&ð #'§,¡,ñ!/ð #&ñ!&ô #& c¨!¡f£+ñ!.ó
&˜Fð 06˜H VÑ,Ø14°Q±˜H XÑ.ð  $Ÿ™Ð:Ü(+¨D¯O©OÓ(< ä%*¨1¨e¦_ Ø?BÀ1ÀqÁ5¹z ¨¯©¸Ñ);Ò <ð &5ð  # 1™v˜~Ø '§¡Ü$,¸"ÀxÔ$Pö!"ð !(§¡Ü$,Ü58¸¸Q¹³[È8ô%&ö!"ñg  &ð| ˆN�7ˆNøô[ ò 	Üð-óð ðûð	ûôN !ò Ü—K‘KÐ";¸B¸4Ð @ÔAÜ×'Ñ'Ô)Ø—L‘L”NØûð	ûô ò 	Ü�K‰KÐ3°B°4Ð8Ô9Ü×ÑÔ!Øûð	úsu   ‚W ‘DX, ÄB
X, Æ A"X, ÈC8W Ë<W ÌJ8W Ö=X, Ö?X, ×	W×
W×W×	X)×'=X$Ø$X)Ø)X, Ø,	Y'Ø5-Y"Ù"Y')rz   r   r|   r0   r‹   r   )r-   zList[Document])r1   r2   r3   r4   r   r»   r5   r6   s   @r   rˆ   rˆ   ¸   s   ø„ ñõ#÷
ur   rˆ   c                  ó,   ‡ — e Zd ZdZdˆ fd„Zdd„Zˆ xZS )ÚOracleTextSplitterz$Splitting text using Oracle chunker.c                óÚ   •— || _         || _        t        ‰| �  di |¤Ž 	 ddl}	 ddl}|| _        || _        y# t        $ r}t        d«      |‚d}~ww xY w# t        $ r t        d«      ‚w xY w)zInitialize.r   NrX   zjoracledb or json or both are not installed. Please install them. Recommendations: `pip install oracledb`. r†   )	rz   r|   r   r   rp   rf   rg   Ú	_oracledbÚ_json)r   rz   r|   r‹   rp   rf   r}   r   s          €r   r   zOracleTextSplitter.__init__  sŒ   ø€ àˆŒ	ØˆŒÜ‰ÑÑ"˜6Ò"ð	ÛðÛð &ˆDŒNØˆD�Jøô ò Ü!ð1óð ðûðûô ò 	Üð>óð ð	ús+    A ¥8 ©A ¸	AÁAÁAÁA ÁA*c                ój  — 	 ddl }g }	 d| j                  j                  _        | j
                  j                  «       }|j                  |j                  ¬«       |j                  d|| j                  j                  | j                  «      ¬«       	 |j                  «       }|€	 |S | j                  j                  |d   «      }|j                  |d   «       ŒH# t        $ r}t        d«      |‚d}~ww xY w# t         $ r2}t"        j%                  d	|› �«       t'        j(                  «        ‚ d}~ww xY w)
z&Split incoming text and return chunks.r   NrX   F)r    zUselect t.column_value from dbms_vector_chain.utl_to_chunks(:content, json(:params)) t)r    r|   Ú
chunk_datare   )rf   rg   r¿   rh   ri   rz   rj   ÚsetinputsizesÚCLOBro   rÀ   rq   r|   ÚfetchonerŠ   r¤   rw   rx   ry   r®   r¯   )	r   r_   rf   r}   Úsplitsrj   r¸   Údr‚   s	            r   Ú
split_textzOracleTextSplitter.split_text˜  s+  € ð	Ûð ˆð	à16ˆD�N‰N×#Ñ#Ô.à—Y‘Y×%Ñ%Ó'ˆFà× Ñ ¨¯©Ð Ô7Ø�N‰NðOàØ—z‘z×'Ñ'¨¯©Ó4ð	 ô ð Ø—o‘oÓ'�Ø�;Øð ˆMð —J‘J×$Ñ$ S¨¡VÓ,�Ø—‘˜a ™oÔ.ð øô- ò 	Üð-óð ðûð	ûô> ò 	Ü�K‰KÐ3°B°4Ð8Ô9Ü×ÑÔ!Øûð	ús5   ‚C ‰BC7 Â'3C7 Ã	C4Ã#C/Ã/C4Ã7	D2Ä -D-Ä-D2)rz   r   r|   r0   r‹   r   r-   r.   )r_   r/   r-   z	List[str])r1   r2   r3   r4   r   rÈ   r5   r6   s   @r   r½   r½   |  s   ø„ Ù.õ÷2'r   r½   )#Ú
__future__r   rF   rp   Úloggingr¥   r@   rD   rC   r®   Úhtml.parserr   Útypingr   r   r   r   r	   r
   r   Úlangchain_core.document_loadersr   Úlangchain_core.documentsr   Úlangchain_text_splittersr   rf   r   Ú	getLoggerr1   rx   r   r8   rˆ   r½   r†   r   r   Ú<module>rÑ      s’   ðõ #ã Û Û Û 	Û Û Û Û Ý "ß I× IÑ Iå 6Ý -Ý 1áÝ#à	ˆ×	Ñ	˜8Ó	$€à "ô˜Zô ð< ÷oñ oðd ôA�jô AôHC˜õ Cr   