ó
    üÞ j°  ã                  óÈ   • % S r SSKJr  SSKrSSKrSSKrSSKJr  \" \S5      (       a  \R                  \R                  4O\R                  4rS\S'   SS jrSS	 jrSS
 jrg)a¶  Static extraction of feedback keys from evaluator functions.

An evaluator's feedback key is the ``key`` value it returns (e.g.
``{"key": "correctness", "score": 1}``). The runner uses these keys to render
per-evaluator progress and to synthesize error feedback when an evaluator
raises. They are inferred by parsing the function's source into an AST and
reading the literal ``key`` values it produces -- never by executing the
function.
é    )ÚannotationsN)ÚCallableÚStrÚtupleÚ_AST_STR_TYPESc                óp   • [        U [        R                  5      (       a  U R                  $ U R                  $ )z.Get string value from ast.Str or ast.Constant.)Ú
isinstanceÚastÚConstantÚvalueÚs)Únodes    Ú^/var/www/html/gaurav/venv/lib/python3.13/site-packages/langsmith/evaluation/_key_extraction.pyÚ_get_str_valuer      s%   € ä# D¬#¯,©,×7Ñ7ˆ4�:‰:ÐC¸T¿V¹VÐCó    c                ó‚  ^• [         R                  " U 5      nS nS mU4S jn[        R                  " U5      n [        R
                  " U5      nUR                  S   n[        U[        R                  [        R                  45      (       d  / $ 0 n/ n[        R                  " U5       GHi  n[        U[        R                  5      (       a¬  [        UR                  [        R                  5      (       a�  / n	UR                  R                   H  n
U	R                  T" U
5      5        M     [        UR                   S   [        R"                  5      (       a  X–UR                   S   R$                  '   MË  MÍ  MÏ  [        U[        R&                  5      (       d  Mð  UR                  c  Mÿ  U" UR                  5      nT" UR                  5      nU" UR                  U5      nUR                  U5        UR                  U5        UR                  U5        GMl     U(       a  U$ UR(                  /$ ! [*         a    / s $ f = f)Nc                óÊ  • [        U [        R                  5      (       a…  / nS n[        U R                  U R
                  5       HQ  u  p4[        U[        5      (       d  M  [        U5      nUS:X  d  M/  [        U[        5      (       d  MF  [        U5      nMS     U(       a  U/$ U$ [        U [        R                  5      (       aŸ  [        U R                  [        R                  5      (       av  U R                  R                  S:X  a\  U R                   HL  nUR                  S:X  d  M  [        UR                  [        5      (       d  M6  [        UR                  5      /s  $    / $ )NÚkeyÚdict)r	   r
   ÚDictÚzipÚkeysÚvaluesr   r   ÚCallÚfuncÚNameÚidÚkeywordsÚargr   )r   r   Ú	key_valuer   r   Úkey_strÚkeywords          r   Úextract_dict_keysÚ@_extract_code_evaluator_feedback_keys.<locals>.extract_dict_keys    s÷   € Ü�dœCŸH™H×%Ñ%ØˆDØˆIÜ! $§)¡)¨T¯[©[Ö9‘
�Ü˜c¤>×2Ó2Ü,¨SÓ1�GØ %Õ'¬J°u¼n×,MÓ,MÜ$2°5Ó$9š	ñ	 :ö
 #,�I�;Ð5°Ð5ä�tœSŸX™X×&Ñ&Ü˜4Ÿ9™9¤c§h¡h×/Ñ/Ø—	‘	—‘ Ó&àŸ=œ=�Ø—;‘; %Õ'¬J°w·}±}Än×,UÓ,UÜ*¨7¯=©=Ó9Ð:Ò:ñ )ð ˆ	r   c                ó‚  • [        U [        R                  5      (       aŸ  [        U R                  [        R                  5      (       av  U R                  R
                  S:X  a\  U R                   HL  nUR                  S:X  d  M  [        UR                  [        5      (       d  M6  [        UR                  5      /s  $    / $ )NÚEvaluationResultr   )r	   r
   r   r   r   r   r   r   r   r   r   )r   r"   s     r   Úextract_evaluation_result_keyÚL_extract_code_evaluator_feedback_keys.<locals>.extract_evaluation_result_key4   s|   € ä�tœSŸX™X×&Ñ&Ü˜4Ÿ9™9¤c§h¡h×/Ñ/Ø—	‘	—‘Ð 2Ó2àŸ=œ=�Ø—;‘; %Õ'¬J°w·}±}Än×,UÓ,UÜ*¨7¯=©=Ó9Ð:Ò:ñ )ð ˆ	r   c                óÈ  >• [        U [        R                  5      (       Ga  [        U R                  [        R                  5      (       aõ  U R                  R
                  S:X  aÛ  U R                   HÉ  nUR                  S:X  d  M  [        UR                  [        R                  5      (       a(  UR                  UR                  R
                  / 5      s  $ [        UR                  [        R                  5      (       d  M‘  / nUR                  R                   H  nUR                  T	" U5      5        M     Us  $    / $ [        U [        R                  5      (       Ga  [        U R                  U R                   5       GHÝ  u  pV[        U["        5      (       d  M  [%        U5      S:X  d  M.  [        U[        R                  5      (       d  MO  / nUR                   GHz  n[        U[        R                  5      (       a„  [        UR                  UR                   5       H^  u  px[        U["        5      (       d  M  [%        U5      S:X  d  M-  [        U["        5      (       d  MD  UR'                  [%        U5      5        M`     M§  [        U[        R                  5      (       d  MÈ  [        UR                  [        R                  5      (       d  Mó  UR                  R
                  S;   d  GM  UR                   HZ  nUR                  S:X  d  M  [        UR                  ["        5      (       d  M6  UR'                  [%        UR                  5      5        M\     GM}     Us  $    / $ )NÚEvaluationResultsÚresultsr   )r&   r   )r	   r
   r   r   r   r   r   r   r   ÚgetÚListÚeltsÚextendr   r   r   r   r   r   Úappend)
r   Ú	variablesr"   r   Úeltr   r   Úelt_keyÚ	elt_valuer'   s
            €r   Úextract_evaluation_results_keysÚN_extract_code_evaluator_feedback_keys.<locals>.extract_evaluation_results_keys?   s1  ø€ ä�tœSŸX™X×&Ò&Ü˜4Ÿ9™9¤c§h¡h×/Ñ/Ø—	‘	—‘Ð 3Ó3àŸ=œ=�Ø—;‘; )Õ+Ü! '§-¡-´·±×:Ñ:Ø(Ÿ}™}¨W¯]©]×-=Ñ-=¸rÓBÒBÜ# G§M¡M´3·8±8×<Ó<Ø!˜Ø#*§=¡=×#5Ô#5˜CØ ŸK™KÑ(EÀcÓ(JÖKñ $6à#šñ )ðF ˆ	ô5 ˜œcŸh™h×'Ò'Ü! $§)¡)¨T¯[©[×9‘
�Ü˜c¤>×2Ó2´~ÀcÓ7JÈiÕ7WÜ! %¬¯©×2Ó2Ø!˜Ø#(§:¥:˜CÜ)¨#¬s¯x©x×8Ñ8Ü:=¸c¿h¹hÈÏ
É
Ö:SÑ$6 Gä(2°7¼N×(KÓ(KÜ,:¸7Ó,CÀuÕ,Lä+5°iÄ×+PÓ+PØ,0¯K©K¼ÀyÓ8QÖ,Ró ;Tô !+¨3´·±× 9Ó 9Ü$.¨s¯x©x¼¿¹×$BÓ$BØ$'§H¡H§K¡KÐ3OÖ$Oà/2¯|¬| GØ'.§{¡{°eÕ';Ä
Ø(/¯©´~÷A&ó A&ð )-¯©´NÀ7Ç=Á=Ó4QÖ(Rô	 0<ñ $.ð(  $šñ1 :ð2 ˆ	r   r   )ÚinspectÚ	getsourceÚtextwrapÚdedentr
   ÚparseÚbodyr	   ÚFunctionDefÚAsyncFunctionDefÚwalkÚAssignr   r-   r.   r/   Útargetsr   r   ÚReturnÚnameÚSyntaxError)r   Úpython_coder#   r5   ÚtreeÚfunction_defr1   r   r   Ú	list_keysr2   Ú	dict_keysÚeval_result_keyÚeval_results_keysr'   s                 @r   Ú%_extract_code_evaluator_feedback_keysrL      sº  ø€ Ü×#Ò# DÓ)€Kòò(	õ)ôV —/’/ +Ó.€Kð Ü�yŠy˜Ó%ˆØ—y‘y ‘|ˆÜ˜,¬¯©¼#×:NÑ:NÐ(O×PÑPØˆIàˆ	Øˆä—H’H˜\×*ˆDÜ˜$¤§
¡
×+Ñ+Ü˜dŸj™j¬#¯(©(×3Ñ3Ø "�IØ#Ÿz™zŸœ˜Ø!×(Ñ(Ñ)FÀsÓ)KÖLñ  /ä! $§,¡,¨q¡/´3·8±8×<Ñ<Ø8A $§,¡,¨q¡/×"4Ñ"4Ó5ñ =ñ	 4ô ˜D¤#§*¡*×-Ó-°$·*±*Ó2HÙ-¨d¯j©jÓ9�	Ù"?ÀÇ
Á
Ó"K�Ù$CØ—J‘J 	ó%Ð!ð —‘˜IÔ&Ø—‘˜OÔ,Ø—‘Ð-×.ñ# +ö( ˆtÐ4 ,×"3Ñ"3Ð!4Ð4øäó ØŠ	ðús,   »AH/ ÂDH/ ÆH/ Æ*A7H/ È"H/ È/H>È=H>c                ó>   •  [        U 5      $ ! [         a    / s $ f = f)a  Best-effort static extraction of an evaluator's feedback keys.

Reads the function's source and returns the literal ``key`` values it emits.
Degrades to ``[]`` when keys can't be statically inferred (dynamic keys,
source unavailable, etc.) so evaluator construction never fails.
)rL   Ú	Exception)r   s    r   Ú_safe_extract_feedback_keysrO   �   s&   € ðÜ4°TÓ:Ð:øÜó ØŠ	ðús   ‚
 �›)r   zast.exprÚreturnÚstr)r   r   rP   z	list[str])Ú__doc__Ú
__future__r   r
   r7   r9   Útypingr   Úhasattrr   r   r   Ú__annotations__r   rL   rO   © r   r   Ú<module>rX      s_   ðòõ #ã 
Û Û Ý ñ  ' s¨E×2Ñ2€S‡W�Wˆc�l‰lÑ¸¿¹¸ð �ó ô
Dô
oõd
r   