§
    ~Štj¤5  ã                   óæ  — U d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZ  G d„ de
¦  «        Z G d„ de
¦  «        Zd	ed
edee         fd„Z G d„ d¦  «        Z G d„ de
¦  «        Z G d„ de
¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Zeeeeeeef                  gef         ee         ef         Zdedefd„Zddœdede	e         deegef         fd„ZdZ	  e j        d¦  «        edœ e j        d¦  «        edœ e j        d ¦  «        edœ e j        d!¦  «        edœ e j        d"¦  «        edœ e j        d#¦  «        edœ e j        d$¦  «        edœ e j        d%¦  «        edœ e j        d&¦  «        edœ e j        d'¦  «        edœ e j        d(¦  «        edœ e j        d)¦  «        edœ e j        d*¦  «        edœ e j        d+¦  «        edœ e j        d,¦  «        edœ e j        d-¦  «        edœ e j        d.¦  «        edœ e j        d/¦  «        edœ e j        d0¦  «        edœ e j        d1¦  «        edœ e j        d2e j        ¦  «        d3e› �dœ e j        d4e j        ¦  «        d5e› �dœ e j        d6e j        ¦  «        d3e› �dœ e j        d7e j        ¦  «        d3e› d8�dœgZee         ed9<   	 dd:d;œd<e	ee                  de	e         deegef         fd=„ZdS )>é    N)Úabstractmethod)Údefaultdict)ÚAnyÚCallableÚOptionalÚ	TypedDictÚUnionc                   ó&   — e Zd ZU ee         ed<   dS )Ú_ExtractOptionsÚ	max_depthN)Ú__name__Ú
__module__Ú__qualname__r   ÚintÚ__annotations__© ó    úR/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langsmith/anonymizer.pyr   r      s&   € € € € € € Ø˜Œ}ÐÐÑðð r   r   c                   óF   — e Zd ZU dZeed<   	 eeeef                  ed<   dS )Ú
StringNodez$String node extracted from the data.ÚvalueÚpathN)	r   r   r   Ú__doc__Ústrr   Úlistr	   r   r   r   r   r   r      s=   € € € € € € Ø.Ð.à€J€J�JØà
ˆu�S˜#�XŒÔ
ÐÐÑØ.Ð.r   r   ÚdataÚoptionsÚreturnc                 óZ  — |                      d¦  «        pd}| dg fg}g }|�r|                     d¦  «        }|€Œ|\  }}}t          |t          t          f¦  «        rA||k    rŒD|                     ¦   «         D ]$\  }	}
|                     |
|dz   ||	gz   f¦  «         Œ%nŠt          |t          ¦  «        r<||k    rŒšt          |¦  «        D ]$\  }}|                     ||dz   ||gz   f¦  «         Œ%n9t          |t          ¦  «        r$|                     t          ||¬¦  «        ¦  «         |�°|S )Nr   é
   r   é   ©r   r   )ÚgetÚpopÚ
isinstanceÚdictr   ÚitemsÚappendr   Ú	enumerater   r   )r   r   r   ÚqueueÚresultÚtaskr   Údepthr   ÚkeyÚnested_valueÚiÚitems                r   Ú_extract_string_nodesr2      sl  € Ø—’˜KÑ(Ô(Ð.¨B€Ià<@À!ÀR¸=¸/€EØ!€Fà
ñ >Ø�yŠy˜‰|Œ|ˆØˆ<ØØ!Ñˆˆu�då�e�d¥KÐ0Ñ1Ô1ð 	>Ø˜	Ò!Ð!ØØ%*§[¢[¡]¤]ð Fð FÑ!��\Ø—’˜l¨E°A©I°t¸s¸e±|ÐDÑEÔEÐEÐEðFå˜�tÑ$Ô$ð 	>Ø˜	Ò!Ð!ØÝ$ UÑ+Ô+ð <ð <‘��4Ø—’˜d E¨A¡I¨t°q°c©zÐ:Ñ;Ô;Ð;Ð;ð<å˜�sÑ#Ô#ð 	>Ø�MŠM�*¨5°tÐ<Ñ<Ô<Ñ=Ô=Ð=ð# ñ >ð& €Mr   c                   óJ   — e Zd ZdZedee         dee         fd„¦   «         ZdS )ÚStringNodeProcessorz-Processes a list of string nodes for masking.Únodesr   c                 ó   — dS )z6Accept and return a list of string nodes to be masked.Nr   )Úselfr5   s     r   Ú
mask_nodeszStringNodeProcessor.mask_nodes8   s   € € € r   N)r   r   r   r   r   r   r   r8   r   r   r   r4   r4   5   sX   € € € € € Ø7Ð7àðE  ZÔ 0ð E°T¸*Ô5Eð Eð Eð Eñ „^ðEð Eð Er   r4   c                   óB   — e Zd ZU dZee         ed<   	 ee         ed<   dS )ÚReplacerOptionsz3Configuration options for replacing sensitive data.r   Ú
deep_cloneN)r   r   r   r   r   r   r   Úboolr   r   r   r:   r:   =   s;   € € € € € € Ø=Ð=à˜Œ}ÐÐÑØ?à˜”ÐÐÑØ/Ð/r   r:   c                   ó@   — e Zd ZU dZej        ed<   	 ee         ed<   dS )ÚStringNodeRulez3Declarative rule used for replacing sensitive data.ÚpatternÚreplaceN)	r   r   r   r   ÚreÚPatternr   r   r   r   r   r   r>   r>   G   s9   € € € € € € Ø=Ð=àŒZÐÐÑØ!à�cŒ]ÐÐÑØGÐGr   r>   c                   ól   — e Zd ZU dZee         ed<   	 dee         fd„Zdee         dee         fd„Z	dS )ÚRuleNodeProcessorzJString node processor that uses a list of rules to replace sensitive data.Úrulesc                 ó(   — d„ |D ¦   «         | _         dS )z.Initialize the processor with a list of rules.c                 óø   — g | ]w}t          |d          t          j        ¦  «        r|d          nt          j        |d          ¦  «        t          |                     d¦  «        t
          ¦  «        r|d         nddœ‘ŒxS )r?   r@   z
[redacted]©r?   r@   )r%   rA   rB   Úcompiler#   r   )Ú.0Úrules     r   ú
<listcomp>z.RuleNodeProcessor.__init__.<locals>.<listcomp>]   s�   € ð 
ð 
ð 
ð õ " $ y¤/µ2´:Ñ>Ô>ð5�D˜”O�Oåœ D¨¤OÑ4Ô4õ " $§(¢(¨9Ñ"5Ô"5µsÑ;Ô;ð&�D˜”O�Oà%ðð ð
ð 
ð 
r   N©rE   )r7   rE   s     r   Ú__init__zRuleNodeProcessor.__init__[   s(   € ð
ð 
ð ð
ñ 
ô 
ˆŒ
ˆ
ˆ
r   r5   r   c                 óè   — g }|D ]l}|d         }| j         D ]$}|d                              |d         |¦  «        }Œ%||d         k    r*|                     t          ||d         ¬¦  «        ¦  «         Œm|S )zMask nodes using the rules.r   r?   r@   r   r"   )rE   Úsubr(   r   )r7   r5   r+   r1   Ú	new_valuerK   s         r   r8   zRuleNodeProcessor.mask_nodesm   s‹   € àˆØð 	Nð 	NˆDØ˜WœˆIØœ
ð Lð L�Ø  œO×/Ò/°°Y´ÀÑKÔK�	�	Ø˜D œMÒ)Ð)Ø—’�j¨y¸tÀF¼|ÐLÑLÔLÑMÔMÐMøØˆr   N)
r   r   r   r   r   r>   r   rN   r   r8   r   r   r   rD   rD   Q   s~   € € € € € € ØTÐTà�ÔÐÐÑðð
˜d >Ô2ð 
ð 
ð 
ð 
ð$	  ZÔ 0ð 	°T¸*Ô5Eð 	ð 	ð 	ð 	ð 	ð 	r   rD   c            	       ó  — e Zd ZU dZeeegef         eeeeeef                  gef         f         e	d<   	 e
e	d<   	 deeegef         eeeeeef                  gef         f         fd„Zdee         dee         fd„ZdS )	ÚCallableNodeProcessorzNString node processor that uses a callable function to replace sensitive data.ÚfuncÚaccepts_pathc                 ór   — || _         t          t          j        |¦  «        j        ¦  «        dk    | _        dS )z2Initialize the processor with a callable function.é   N)rT   ÚlenÚinspectÚ	signatureÚ
parametersrU   )r7   rT   s     r   rN   zCallableNodeProcessor.__init__‰   s4   € ð
 ˆŒ	Ý¥Ô 1°$Ñ 7Ô 7Ô BÑCÔCÀqÒHˆÔÐÐr   r5   r   c                 ó  — g }|D ]|}| j         r"|                      |d         |d         ¦  «        n|                      |d         ¦  «        }||d         k    r*|                     t          ||d         ¬¦  «        ¦  «         Œ}|S )z'Mask nodes using the callable function.r   r   r"   )rU   rT   r(   r   )r7   r5   ÚretvalÚnodeÚ	candidates        r   r8   z CallableNodeProcessor.mask_nodes‘   s’   € à#%ˆØð 	Nð 	NˆDð Ô$ð.�—	’	˜$˜wœ-¨¨f¬Ñ6Ô6Ð6à—Y’Y˜t Gœ}Ñ-Ô-ð ð
 ˜D œMÒ)Ð)Ø—’�j¨y¸tÀF¼|ÐLÑLÔLÑMÔMÐMøØˆr   N)r   r   r   r   r	   r   r   r   r   r   r<   rN   r   r8   r   r   r   rS   rS   y   sñ   € € € € € € ØXÐXà
�˜#˜ ˜Ô$ h°°T¸%ÀÀSÀ¼/Ô5JÐ/KÈSÐ/PÔ&QÐQÔ
RÐRÐRÑRðð ÐÐÑðGð
Ià�H˜c˜U C˜ZÔ(¨(°C¸¸eÀCÈÀH¼oÔ9NÐ3OÐQTÐ3TÔ*UÐUÔVðIð Ið Ið Ið  ZÔ 0ð °T¸*Ô5Eð ð ð ð ð ð r   rS   Úreplacerc                 óŽ   — t          | t          ¦  «        rt          | ¬¦  «        S t          | ¦  «        rt	          | ¬¦  «        S | S )NrM   )rT   )r%   r   rD   ÚcallablerS   )r`   s    r   Ú_get_node_processorrc   ¦   sK   € Ý�(�DÑ!Ô!ð Ý  xÐ0Ñ0Ô0Ð0Ý	�(Ñ	Ô	ð Ý$¨(Ð3Ñ3Ô3Ð3àˆr   ©r   r   c                óR   ‡‡— t          | ¦  «        Šdt          dt          fˆˆfd„}|S )zCreate an anonymizer function.r   r   c                 óö   •— t          | d‰pdi¦  «        }| }‰	                     |¦  «        }|D ]I}|d         s	|d         }Œ|}|d         d d…         D ]
}||         }Œ|d         d         }|d         ||<   ŒJ|S )Nr   r    r   r   éÿÿÿÿ)r2   r8   )
r   r5   Úmutate_valueÚ	to_updater^   ÚtempÚpartÚ	last_partr   Ú	processors
           €€r   Ú
anonymizerz%create_anonymizer.<locals>.anonymizer·   s¨   ø€ Ý% d¨[¸)¸/ÀrÐ,JÑKÔKˆØˆà×(Ò(¨Ñ/Ô/ˆ	Øð 		0ð 		0ˆDØ˜”<ð 0Ø# Gœ}��à#�Ø  œL¨¨"¨Ô-ð &ð &�DØ œ:�D�Dà  œL¨Ô,�	Ø"& w¤-��Y‘�àÐr   )rc   r   )r`   r   rn   rm   s    ` @r   Úcreate_anonymizerro   ¯   sL   øø€ õ $ HÑ-Ô-€Ið�ð ¥ð ð ð ð ð ð ð ð$ Ðr   z[SECRET_DETECTED]zsk-ant-[A-Za-z0-9_-]{20,}rH   z,sk-(?:proj|svcacct|admin)-[A-Za-z0-9_-]{20,}zsk-[A-Za-z0-9]{32,}z1lsv2_(?:pt|sk)_[A-Za-z0-9]{32,}(?:_[A-Za-z0-9]+)*zls__[A-Za-z0-9]{16,}zgh[pousr]_[A-Za-z0-9]{36,}zgithub_pat_[A-Za-z0-9_]{82}zglpat-[A-Za-z0-9_-]{20,}z3\b(?:AKIA|ASIA|ABIA|ACCA|A3T[A-Z0-9])[0-9A-Z]{16}\bzAIza[0-9A-Za-z_-]{35}zya29\.[0-9A-Za-z_-]+zxox[baprs]-[A-Za-z0-9-]{10,}zxapp-\d-[A-Za-z0-9-]{10,}z0https://hooks\.slack\.com/services/[A-Za-z0-9/]+z,\b(?:sk|rk)_(?:live|test)_[A-Za-z0-9]{20,}\bznpm_[A-Za-z0-9]{36}z!pypi-AgEIcHlwaS[A-Za-z0-9_-]{50,}z(SG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}z4eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+zr-----BEGIN (?:[A-Z0-9 ]+ )?PRIVATE KEY(?: BLOCK)?-----[\s\S]+?-----END (?:[A-Z0-9 ]+ )?PRIVATE KEY(?: BLOCK)?-----zã\b([A-Za-z0-9_.-]*(?:API[_-]?KEY|SECRET|TOKEN|PASSWORD|PASSWD|PRIVATE[_-]?KEY|ACCESS[_-]?KEY|AUTH[_-]?TOKEN|CLIENT[_-]?SECRET)(?![A-Za-z0-9])(?:[_.-][A-Za-z0-9]+)*["']?\s*[:=]\s*["']?)(?:(?:bearer|token|basic)\s+)?[^\s"'&;]{6,}z\g<1>zs\b(authorization|x-api-key|x-auth-token)(["']?\s*[:=]\s*["']?)(bearer\s+|token\s+|basic\s+)?[A-Za-z0-9._~+/-]{8,}=*z\g<1>\g<2>\g<3>z%\b(Bearer\s+)[A-Za-z0-9._~+/-]{10,}=*z-\b([a-z][a-z0-9+.-]*://[^:@/\s]*:)[^@/\s]+(@)z\g<2>ÚDEFAULT_SECRET_RULESé   )Úextra_rulesr   rr   c                 ót   — t          t          ¦  «        }| r|t          | ¦  «        z   }t          ||¬¦  «        S )a±  Build an anonymizer pre-loaded with :data:`DEFAULT_SECRET_RULES`.

    Pass the result to ``Client(anonymizer=...)`` to redact detected secrets
    from run inputs, outputs, and metadata client-side, before upload.

    Args:
        extra_rules: Additional rules appended after the defaults.
        max_depth: Max recursion depth (default 24; higher than
            ``create_anonymizer``'s default of 10 because traced payloads nest
            deeply, e.g. ``messages[].content[].args``).

    Example:
        >>> from langsmith import Client
        >>> from langsmith.anonymizer import create_secret_anonymizer
        >>> client = Client(anonymizer=create_secret_anonymizer())
    rd   )r   rp   ro   )rr   r   rE   s      r   Úcreate_secret_anonymizerrt   V  s?   € õ* Õ%Ñ&Ô&€EØð *Ø�˜[Ñ)Ô)Ñ)ˆÝ˜U¨iÐ8Ñ8Ô8Ð8r   ) rA   rY   Úabcr   Úcollectionsr   Útypingr   r   r   r   r	   r   r   r   r2   r4   r:   r>   rD   rS   r   r   ÚReplacerTyperc   ro   ÚSECRET_PLACEHOLDERrI   Ú
IGNORECASErp   r   rt   r   r   r   ú<module>r{      s>  ðØ 	€	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <ðð ð ð ð �iñ ô ð ð/ð /ð /ð /ð /�ñ /ô /ð /ð ð ¨oð À$ÀzÔBRð ð ð ð ð8Eð Eð Eð Eð Eñ Eô Eð Eð0ð 0ð 0ð 0ð 0�iñ 0ô 0ð 0ðHð Hð Hð Hð H�Yñ Hô Hð Hð%ð %ð %ð %ð %Ð+ñ %ô %ð %ðP#ð #ð #ð #ð #Ð/ñ #ô #ð #ðL Øˆc�4˜˜c 3˜hœÔ(Ð)¨3Ð.Ô/ØˆÔØðô€ð ,ð Ð3Fð ð ð ð ð  $ðð ð Øðð ˜Œ}ðð ˆsˆe�SˆjÔð	ð ð ð ð: )Ð ðDð �2”:Ð:Ñ;Ô;Ø%ðð ð �2”:ÐMÑNÔNØ%ðð ð �”
Ð1Ñ2Ô2Ð?QÐRÐRð �2”:ÐRÑSÔSØ%ðð ð �”
Ð2Ñ3Ô3Ð@RÐSÐSð �2”:Ð;Ñ<Ô<Ø%ðð ð
 �2”:Ð<Ñ=Ô=Ø%ðð ð
 �”
Ð6Ñ7Ô7ÐDVÐWÐWð �2”:ÐTÑUÔUØ%ðð ð
 �”
Ð3Ñ4Ô4ÐASÐTÐTØ�”
Ð2Ñ3Ô3Ð@RÐSÐSð �2”:Ð=Ñ>Ô>Ø%ðð ð
 �2”:Ð:Ñ;Ô;Ø%ðð ð
 �2”:ÐQÑRÔRØ%ðð ð �2”:ÐMÑNÔNØ%ðð ð
 �”
Ð1Ñ2Ô2Ð?QÐRÐRð �2”:ÐBÑCÔCØ%ðð ð �2”:ÐIÑJÔJØ%ðð ð �2”:ÐUÑVÔVØ%ðð ð �2”:ðLñ
ô 
ð &ðð ð" �2”:ð wØŒMñ
ô 
ð 1Ð.Ð0Ð0ðð ð �2”:ð GØŒMñ
ô 
ð ;Ð&8Ð:Ð:ðð ð �2”:ÐFÈÌÑVÔVØ0Ð.Ð0Ð0ðð ð �2”:Ø<¸b¼mñ
ô 
ð 6Ð.Ð5Ð5Ð5ð	ð ðiz.Ð �d˜>Ô*ð zð zñ zðvGð 37Ø!ð9ð 9ð 9à˜$˜~Ô.Ô/ð9ð ˜Œ}ð9ð ˆsˆe�SˆjÔð	9ð 9ð 9ð 9ð 9ð 9r   