Ë
    ³Œj°  ã                  ó¸   — U d Z ddlmZ ddlZddlZddlZddlmZ  eed«      rej                  ej                  fnej                  fZded<   dd„Zdd	„Zdd
„Zy)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                óf   — t        | t        j                  «      r| j                  S | j                  S )z.Get string value from ast.Str or ast.Constant.)Ú
isinstanceÚastÚConstantÚvalueÚs)Únodes    ún/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langsmith/evaluation/_key_extraction.pyÚ_get_str_valuer      s"   € ä# D¬#¯,©,Ô7ˆ4�:‰:ÐC¸T¿V¹VÐCó    c                ó(  ‡— t        j                  | «      }d„ }d„ Šˆfd„}t        j                  |«      }	 t	        j
                  |«      }|j                  d   }t        |t        j                  t        j                  f«      sg S i }g }t	        j                  |«      D �]M  }t        |t        j                  «      ržt        |j                  t        j                  «      sŒCg }	|j                  j                  D ]  }
|	j                   ‰|
«      «       Œ t        |j                   d   t        j"                  «      sŒŸ|	||j                   d   j$                  <   Œ¼t        |t        j&                  «      sŒ×|j                  €Œä ||j                  «      } ‰|j                  «      } ||j                  |«      }|j                  |«       |j                  |«       |j                  |«       �ŒP |r|S |j(                  gS # t*        $ r g cY S w xY w)Nc                óp  — t        | t        j                  «      rqg }d }t        | j                  | j
                  «      D ]C  \  }}t        |t        «      sŒt        |«      }|dk(  sŒ(t        |t        «      sŒ9t        |«      }ŒE |r|gS |S t        | t        j                  «      r�t        | j                  t        j                  «      rl| j                  j                  dk(  rS| j                  D ]D  }|j                  dk(  sŒt        |j                  t        «      sŒ.t        |j                  «      gc S  g 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_keysz@_extract_code_evaluator_feedback_keys.<locals>.extract_dict_keys    sç   € Ü�dœCŸH™HÔ%ØˆDØˆIÜ! $§)¡)¨T¯[©[Ö9‘
��UÜ˜c¤>Õ2Ü,¨SÓ1�GØ %Ó'¬J°u¼nÕ,MÜ$2°5Ó$9™	ð	 :ñ
 #,�I�;Ð5°Ð5ä�tœSŸX™XÔ&Ü˜4Ÿ9™9¤c§h¡hÔ/Ø—	‘	—‘ Ò&àŸ=œ=�Ø—;‘; %Ó'¬J°w·}±}ÄnÕ,UÜ*¨7¯=©=Ó9Ð:Ò:ð )ð ˆ	r   c                óZ  — t        | t        j                  «      r�t        | j                  t        j                  «      rl| j                  j
                  dk(  rS| j                  D ]D  }|j                  dk(  sŒt        |j                  t        «      sŒ.t        |j                  «      gc S  g S )NÚEvaluationResultr   )r	   r
   r   r   r   r   r   r   r   r   r   )r   r"   s     r   Úextract_evaluation_result_keyzL_extract_code_evaluator_feedback_keys.<locals>.extract_evaluation_result_key4   ss   € ä�tœSŸX™XÔ&Ü˜4Ÿ9™9¤c§h¡hÔ/Ø—	‘	—‘Ð 2Ò2àŸ=œ=�Ø—;‘; %Ó'¬J°w·}±}ÄnÕ,UÜ*¨7¯=©=Ó9Ð:Ò:ð )ð ˆ	r   c                ó
  •— t        | t        j                  «      �rt        | j                  t        j                  «      rä| j                  j
                  dk(  rË| j                  D ]º  }|j                  dk(  sŒt        |j                  t        j                  «      r(|j                  |j                  j
                  g «      c S t        |j                  t        j                  «      sŒ„g }|j                  j                  D ]  }|j                   ‰	|«      «       Œ |c S  g S t        | t        j                  «      �rÃt        | j                  | j                   «      D �]Ÿ  \  }}t        |t"        «      sŒt%        |«      dk(  sŒ't        |t        j                  «      sŒBg }|j                  D �]J  }t        |t        j                  «      rtt        |j                  |j                   «      D ]P  \  }}t        |t"        «      sŒt%        |«      dk(  sŒ&t        |t"        «      sŒ7|j'                  t%        |«      «       ŒR Œ’t        |t        j                  «      sŒ­t        |j                  t        j                  «      sŒÒ|j                  j
                  dv sŒë|j                  D ]Q  }|j                  dk(  sŒt        |j                  t"        «      sŒ.|j'                  t%        |j                  «      «       ŒS �ŒM |c S  g 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_keyszN_extract_code_evaluator_feedback_keys.<locals>.extract_evaluation_results_keys?   s  ø€ ä�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‘
��UÜ˜c¤>Õ2´~ÀcÓ7JÈiÓ7WÜ! %¬¯©Õ2Ø!˜Ø#(§:¥:˜CÜ)¨#¬s¯x©xÔ8Ü:=¸c¿h¹hÈÏ
É
Ö:SÑ$6 G¨Yä(2°7¼NÕ(KÜ,:¸7Ó,CÀuÓ,Lä+5°iÄÕ+PØ,0¯K©K¼ÀyÓ8QÕ,Rñ ;Tô !+¨3´·±Õ 9Ü$.¨s¯x©x¼¿¹Õ$BØ$'§H¡H§K¡KÐ3OÒ$Oà/2¯|¬| GØ'.§{¡{°eÓ';Ä
Ø(/¯©´~õ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#   r3   ÚtreeÚfunction_defr/   r   r   Ú	list_keysr0   Ú	dict_keysÚeval_result_keyÚeval_results_keysr&   s                 @r   Ú%_extract_code_evaluator_feedback_keysrI      s¡  ø€ Ü×#Ñ# DÓ)€Kòò(	ô)ôV —/‘/ +Ó.€Kð Ü�y‰y˜Ó%ˆØ—y‘y ‘|ˆÜ˜,¬¯©¼#×:NÑ:NÐ(OÔPØˆIàˆ	Øˆä—H‘H˜\×*ˆDÜ˜$¤§
¡
Ô+Ü˜dŸj™j¬#¯(©(Õ3Ø "�IØ#Ÿz™zŸœ˜Ø!×(Ñ(Ñ)FÀsÓ)KÕLð  /ä! $§,¡,¨q¡/´3·8±8Õ<Ø8A˜	 $§,¡,¨q¡/×"4Ñ"4Ò5Ü˜D¤#§*¡*Õ-°$·*±*Ñ2HÙ-¨d¯j©jÓ9�	Ù"?ÀÇ
Á
Ó"K�Ù$CØ—J‘J 	ó%Ð!ð —‘˜IÔ&Ø—‘˜OÔ,Ø—‘Ð-Ö.ð# +ñ( ˆtÐ4 ,×"3Ñ"3Ð!4Ð4øäò ØŠ	ðús9   ¸AH ÂAH Ã$AH Å 7H Å8H ÆA0H Ç6H ÈHÈHc                ó<   — 	 t        | «      S # t        $ r g cY S w xY w)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.
    )rI   Ú	Exception)r   s    r   Ú_safe_extract_feedback_keysrL   �   s&   € ðÜ4°TÓ:Ð:øÜò ØŠ	ðús   ‚
 �š)r   zast.exprÚreturnÚstr)r   r   rM   z	list[str])Ú__doc__Ú
__future__r   r
   r4   r6   Útypingr   Úhasattrr   r   r   Ú__annotations__r   rI   rL   © r   r   Ú<module>rU      s\   ðòõ #ã 
Û Û Ý ñ  ' s¨EÔ2€S‡W�Wˆc�l‰lÑ¸¿¹¸ð �ó ó
Dó
oôd
r   