Ë
    ³Œj¤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 j6                  d«      edœ e j6                  d«      edœ e j6                  d «      edœ e j6                  d!«      edœ e j6                  d"«      edœ e j6                  d#«      edœ e j6                  d$«      edœ e j6                  d%«      edœ e j6                  d&«      edœ e j6                  d'«      edœ e j6                  d(«      edœ e j6                  d)«      edœ e j6                  d*«      edœ e j6                  d+«      edœ e j6                  d,«      edœ e j6                  d-«      edœ e j6                  d.«      edœ e j6                  d/«      edœ e j6                  d0«      edœ e j6                  d1«      edœ e j6                  d2e j8                  «      d3e› �dœ e j6                  d4e j8                  «      d5e› �dœ e j6                  d6e j8                  «      d3e› �dœ e j6                  d7e j8                  «      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y)>é    N)Úabstractmethod)Údefaultdict)ÚAnyÚCallableÚOptionalÚ	TypedDictÚUnionc                   ó   — e Zd ZU ee   ed<   y)Ú_ExtractOptionsÚ	max_depthN)Ú__name__Ú
__module__Ú__qualname__r   ÚintÚ__annotations__© ó    ú^/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langsmith/anonymizer.pyr   r      s   … Ø˜‰}Óðr   r   c                   ó8   — e Zd ZU dZeed<   	 eeeef      ed<   y)Ú
StringNodez$String node extracted from the data.ÚvalueÚpathN)	r   r   r   Ú__doc__Ústrr   Úlistr	   r   r   r   r   r   r      s#   … Ù.àƒJØà
ˆu�S˜#�X‰Ñ
ÓØ.r   r   ÚdataÚoptionsÚreturnc                 ó   — |j                  d«      xs d}| dg fg}g }|rÞ|j                  d«      }|€Œ|\  }}}t        |t        t        f«      r:||k\  rŒ8|j                  «       D ]   \  }	}
|j                  |
|dz   ||	gz   f«       Œ" nqt        |t        «      r5||k\  rŒ‚t        |«      D ]   \  }}|j                  ||dz   ||gz   f«       Œ" n,t        |t        «      r|j                  t        ||¬«      «       |rŒÞ|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      s  € Ø—‘˜KÓ(Ò.¨B€Ià<@À!ÀR¸=¸/€EØ!€Fá
Ø�y‰y˜‹|ˆØˆ<ØØ!Ñˆˆu�dä�eœd¤KÐ0Ô1Ø˜	Ò!ØØ%*§[¡[¦]Ñ!��\Ø—‘˜l¨E°A©I°t¸s¸e±|ÐDÕEñ &3ä˜œtÔ$Ø˜	Ò!ØÜ$ UÖ+‘��4Ø—‘˜d E¨A¡I¨t°q°c©zÐ:Õ;ñ ,ä˜œsÔ#Ø�M‰Mœ*¨5°tÔ<Ô=ò# ð& €Mr   c                   ó6   — e Zd ZdZedee   dee   fd„«       Zy)ÚStringNodeProcessorz-Processes a list of string nodes for masking.Únodesr   c                  ó   — y)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   s3   „ Ù7àðE  ZÑ 0ð E°T¸*Ñ5Eò Eó ñEr   r4   c                   ó4   — e Zd ZU dZee   ed<   	 ee   ed<   y)Ú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                   óB   — e Zd ZU dZej
                  ed<   	 ee   ed<   y)ÚStringNodeRulez3Declarative rule used for replacing sensitive data.ÚpatternÚreplaceN)	r   r   r   r   ÚreÚPatternr   r   r   r   r   r   r>   r>   G   s   … Ù=à�Z‰ZÓØ!à�c‰]ÓØGr   r>   c                   óR   — 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	y)ÚRuleNodeProcessorzJString node processor that uses a list of rules to replace sensitive data.Úrulesc           	      óö   — |D �cg c]c  }t        |d   t        j                  «      r|d   nt        j                  |d   «      t        |j	                  d«      t
        «      r|d   nddœ‘Œe c}| _        yc c}w )z.Initialize the processor with a list of rules.r?   r@   z
[redacted]©r?   r@   N)r%   rA   rB   Úcompiler#   r   rE   )r7   rE   Úrules      r   Ú__init__zRuleNodeProcessor.__init__[   sz   € ñ ó
ñ �ô " $ y¡/´2·:±:Ô>ð ˜’OäŸ™ D¨¡OÓ4ô " $§(¡(¨9Ó"5´sÔ;ð ˜’Oà%óð ñ
ˆ�
ùò 
s   …A(A6r5   r   c                 óÄ   — g }|D ]X  }|d   }| j                   D ]  }|d   j                  |d   |«      }Œ ||d   k7  sŒ:|j                  t        ||d   ¬«      «       ŒZ |S )zMask nodes using the rules.r   r?   r@   r   r"   )rE   Úsubr(   r   )r7   r5   r+   r1   Ú	new_valuerI   s         r   r8   zRuleNodeProcessor.mask_nodesm   sl   € àˆÛˆDØ˜W™ˆIØŸ
œ
�Ø  ™O×/Ñ/°°Y±ÀÓK‘	ð #à˜D ™MÓ)Ø—‘œj¨y¸tÀF¹|ÔLÕMð ð ˆr   N)
r   r   r   r   r   r>   r   rJ   r   r8   r   r   r   rD   rD   Q   sC   … Ù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y)	ÚCallableNodeProcessorzNString node processor that uses a callable function to replace sensitive data.ÚfuncÚaccepts_pathc                 ór   — || _         t        t        j                  |«      j                  «      dk(  | _        y)z2Initialize the processor with a callable function.é   N)rP   ÚlenÚinspectÚ	signatureÚ
parametersrQ   )r7   rP   s     r   rJ   zCallableNodeProcessor.__init__‰   s.   € ð
 ˆŒ	Ü¤× 1Ñ 1°$Ó 7× BÑ BÓCÀqÑHˆÕr   r5   r   c                 óØ   — g }|D ]b  }| j                   r| j                  |d   |d   «      n| j                  |d   «      }||d   k7  sŒD|j                  t        ||d   ¬«      «       Œd |S )z'Mask nodes using the callable function.r   r   r"   )rQ   rP   r(   r   )r7   r5   ÚretvalÚnodeÚ	candidates        r   r8   z CallableNodeProcessor.mask_nodes‘   su   € à#%ˆÛˆDð ×$Ò$ð —	‘	˜$˜w™-¨¨f©Ô6à—Y‘Y˜t G™}Ó-ð ð
 ˜D ™MÓ)Ø—‘œj¨y¸tÀF¹|ÔLÕMð ð ˆr   N)r   r   r   r   r	   r   r   r   r   r   r<   rJ   r   r8   r   r   r   rO   rO   y   s­   … ÙXà
�˜#˜ ˜Ñ$ h°°T¸%ÀÀSÀ¹/Ñ5JÐ/KÈSÐ/PÑ&QÐQÑ
RÓRðð ÓðGð
Ià�H˜c˜U C˜ZÑ(¨(°C¸¸eÀCÈÀH¹oÑ9NÐ3OÐQTÐ3TÑ*UÐUÑVóIð  ZÑ 0ð °T¸*Ñ5Eô r   rO   Úreplacerc                 ól   — t        | t        «      rt        | ¬«      S t        | «      rt	        | ¬«      S | S )N)rE   )rP   )r%   r   rD   ÚcallablerO   )r\   s    r   Ú_get_node_processorr_   ¦   s/   € Ü�(œDÔ!Ü  xÔ0Ð0Ü	�(Ô	Ü$¨(Ô3Ð3àˆr   ©r   r   c                óF   ‡‡— t        | «      Šdt        dt        fˆˆfd„}|S )zCreate an anonymizer function.r   r   c                 ó¾   •— t        | d‰xs di«      }| }‰	j                  |«      }|D ]1  }|d   s|d   }Œ|}|d   d d D ]  }||   }Œ	 |d   d   }|d   ||<   Œ3 |S )Nr   r    r   r   éÿÿÿÿ)r2   r8   )
r   r5   Úmutate_valueÚ	to_updaterZ   ÚtempÚpartÚ	last_partr   Ú	processors
           €€r   Ú
anonymizerz%create_anonymizer.<locals>.anonymizer·   s�   ø€ Ü% d¨[¸)º/ÀrÐ,JÓKˆØˆà×(Ñ(¨Ó/ˆ	ÛˆDØ˜’<Ø# G™}‘à#�Ø  ™L¨¨"Ó-�DØ ™:‘Dð .ð ! ™L¨Ñ,�	Ø"& w¡-��Y’ð ð Ðr   )r_   r   )r\   r   rj   ri   s    ` @r   Úcreate_anonymizerrk   ¯   s*   ù€ ô $ HÓ-€Iðœð ¤ö ð$ Ðr   z[SECRET_DETECTED]zsk-ant-[A-Za-z0-9_-]{20,}rG   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   rn   c                 óZ   — 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())
    r`   )r   rl   rk   )rn   r   rE   s      r   Úcreate_secret_anonymizerrp   V  s.   € ô* Ô%Ó&€EÙØœ˜[Ó)Ñ)ˆÜ˜U¨iÔ8Ð8r   ) rA   rU   Úabcr   Úcollectionsr   Útypingr   r   r   r   r	   r   r   r   r2   r4   r:   r>   rD   rO   r   r   ÚReplacerTyper_   rk   ÚSECRET_PLACEHOLDERrH   Ú
IGNORECASErl   r   rp   r   r   r   Ú<module>rw      s%  ðÜ 	Û Ý Ý #ß <Õ <ô�iô ô/�ô /ð ð ¨oð À$ÀzÑBRó ÷8Eñ Eô0�iô 0ôH�Yô Hô%Ð+ô %ôP#Ð/ô #ðL Øˆc�4˜˜c 3˜h™Ñ(Ð)¨3Ð.Ñ/ØˆÑØðñ€ð ,ð Ð3Fó ð  $òØðð ˜‰}ðð ˆsˆe�SˆjÑó	ð: )Ð ðDð �2—:‘:Ð:Ó;Ø%ñð �2—:‘:ÐMÓNØ%ñð �—
‘
Ð1Ó2Ð?QÑRð �2—:‘:ÐRÓSØ%ñð �—
‘
Ð2Ó3Ð@RÑSð �2—:‘:Ð;Ó<Ø%ñð
 �2—:‘:Ð<Ó=Ø%ñð
 �—
‘
Ð6Ó7ÐDVÑWð �2—:‘:ÐTÓUØ%ñð
 �—
‘
Ð3Ó4ÐASÑTØ�—
‘
Ð2Ó3Ð@RÑSð �2—:‘:Ð=Ó>Ø%ñð
 �2—:‘:Ð:Ó;Ø%ñð
 �2—:‘:ÐQÓRØ%ñð �2—:‘:ÐMÓNØ%ñð
 �—
‘
Ð1Ó2Ð?QÑRð �2—:‘:ÐBÓCØ%ñð �2—:‘:ÐIÓJØ%ñð �2—:‘:ÐUÓVØ%ñð �2—:‘:ðLó
ð &ñð" �2—:‘:ð wØ�M‰Mó
ð Ð.Ð/Ð0ñð �2—:‘:ð GØ�M‰Mó
ð &Ð&8Ð%9Ð:ñð �2—:‘:ÐFÈÏÉÓVØÐ.Ð/Ð0ñð �2—:‘:Ø<¸b¿m¹mó
ð Ð.Ð/¨uÐ5ñ	ðiz.Ð �d˜>Ñ*ó zðvGð 37Ø!ò9à˜$˜~Ñ.Ñ/ð9ð ˜‰}ð9ð ˆsˆe�SˆjÑô	9r   