§
    ~Štj°  ã                  ó¢   — 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dS )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_TYPESÚnodeúast.exprÚreturnÚstrc                óR   — t          | t          j        ¦  «        r| j        n| j        S )z.Get string value from ast.Str or ast.Constant.)Ú
isinstanceÚastÚConstantÚvalueÚs)r   s    úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langsmith/evaluation/_key_extraction.pyÚ_get_str_valuer      s!   € å# D­#¬,Ñ7Ô7ÐCˆ4Œ:ˆ:¸T¼VÐCó    Úfuncr   ú	list[str]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 �]7}t          |t          j        ¦  «        r‰t          |j        t          j        ¦  «        rig }	|j        j        D ] }
|	                      ‰|
¦  «        ¦  «         Œ!t          |j        d         t          j        ¦  «        r|	||j        d         j        <   Œ¦t          |t          j        ¦  «        rw|j        �p ||j        ¦  «        } ‰|j        ¦  «        } ||j        |¦  «        }|                     |¦  «         |                     |¦  «         |                     |¦  «         �Œ9|r|n|j        gS # t*          $ r g cY S w xY w)Nc                óJ  — t          | t          j        ¦  «        ryg }d }t          | j        | j        ¦  «        D ]S\  }}t          |t          ¦  «        r9t          |¦  «        }|dk    r$t          |t          ¦  «        rt          |¦  «        }ŒT|r|gn|S t          | t          j        ¦  «        rut          | j	        t          j
        ¦  «        rV| j	        j        dk    rF| j        D ]>}|j        dk    r1t          |j        t          ¦  «        rt          |j        ¦  «        gc S Œ?g S )NÚkeyÚdict)r   r   ÚDictÚzipÚkeysÚvaluesr   r   ÚCallr   Ú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Ñ%Ô%ð 	;ØˆDØˆIÝ! $¤)¨T¬[Ñ9Ô9ð :ð :‘
��UÝ˜c¥>Ñ2Ô2ð :Ý,¨SÑ1Ô1�GØ %Ò'Ð'­J°u½nÑ,MÔ,MÐ'Ý$2°5Ñ$9Ô$9˜	øØ"+Ð5�I�;�;°Ð5å�t�SœXÑ&Ô&ð	;å˜4œ9¥c¤hÑ/Ô/ð	;ð ”	” Ò&Ð&àœ=ð ;ð ;�Ø”; %Ò'Ð'­J°w´}ÅnÑ,UÔ,UÐ'Ý*¨7¬=Ñ9Ô9Ð:Ð:Ð:Ð:øØˆ	r   c                ó$  — t          | t          j        ¦  «        rut          | j        t          j        ¦  «        rV| j        j        dk    rF| j        D ]>}|j        dk    r1t          |j        t          ¦  «        r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   sŒ   € å�t�SœXÑ&Ô&ð	;å˜4œ9¥c¤hÑ/Ô/ð	;ð ”	”Ð 2Ò2Ð2àœ=ð ;ð ;�Ø”; %Ò'Ð'­J°w´}ÅnÑ,UÔ,UÐ'Ý*¨7¬=Ñ9Ô9Ð:Ð:Ð:Ð:øØˆ	r   c                ó„  •— t          | t          j        ¦  «        rÙt          | j        t          j        ¦  «        rº| j        j        dk    rª| j        D ] }|j        dk    r“t          |j        t          j        ¦  «        r"| 	                    |j        j        g ¦  «        c S t          |j        t          j
        ¦  «        r3g }|j        j        D ] }|                      ‰	|¦  «        ¦  «         Œ!|c S Œ¡�nËt          | t          j        ¦  «        �r°t          | j        | j        ¦  «        D �]”\  }}t          |t"          ¦  «        �rxt%          |¦  «        dk    �rdt          |t          j
        ¦  «        �rIg }|j        D �]:}t          |t          j        ¦  «        r€t          |j        |j        ¦  «        D ]d\  }}t          |t"          ¦  «        rJt%          |¦  «        dk    r7t          |t"          ¦  «        r"|                     t%          |¦  «        ¦  «         ŒeŒ�t          |t          j        ¦  «        rƒt          |j        t          j        ¦  «        rd|j        j        dv rV|j        D ]N}|j        dk    rAt          |j        t"          ¦  «        r'|                     t%          |j        ¦  «        ¦  «         ŒO�Œ<|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Ñ&Ô&ð'	$å˜4œ9¥c¤hÑ/Ô/ð'	$ð ”	”Ð 3Ò3Ð3àœ=ð $ð $�Ø”; )Ò+Ð+Ý! '¤-µ´Ñ:Ô:ð $Ø(Ÿ}š}¨W¬]Ô-=¸rÑBÔBÐBÐBÐBÝ# G¤Mµ3´8Ñ<Ô<ð $Ø!˜Ø#*¤=Ô#5ð Lð L˜CØ ŸKšKÐ(EÐ(EÀcÑ(JÔ(JÑKÔKÐKÐKØ#˜˜˜øñ$õ ˜�cœhÑ'Ô'ñ 	$Ý! $¤)¨T¬[Ñ9Ô9ð $ñ $‘
��UÝ˜c¥>Ñ2Ô2ñ $µ~ÀcÑ7JÔ7JÈiÒ7WÑ7WÝ! %­¬Ñ2Ô2ñ $Ø!˜Ø#(¤:ð Sñ S˜CÝ)¨#­s¬xÑ8Ô8ð SÝ:=¸c¼hÈÌ
Ñ:SÔ:Sð !Sð !SÑ$6 G¨Yå(2°7½NÑ(KÔ(Kð%Så,:¸7Ñ,CÔ,CÀuÒ,LÐ,Lå+5°iÅÑ+PÔ+Pð )SØ,0¯KªK½ÀyÑ8QÔ8QÑ,RÔ,RÐ,Røð!Sõ !+¨3µ´Ñ 9Ô 9ð	Så$.¨s¬x½¼Ñ$BÔ$Bð	Sð %(¤H¤KÐ3OÐ$OÐ$Oà/2¬|ð !Sð !S GØ'.¤{°eÒ';Ð';Å
Ø(/¬µ~ñA&ô A&Ð';ð )-¯ªµNÀ7Ä=Ñ4QÔ4QÑ(RÔ(RÐ(Røùà#˜˜˜ùØˆ	r   r   )ÚinspectÚ	getsourceÚtextwrapÚdedentr   ÚparseÚbodyr   ÚFunctionDefÚAsyncFunctionDefÚwalkÚAssignr   r/   r0   r1   Útargetsr    r!   ÚReturnÚnameÚSyntaxError)r   Úpython_coder'   r7   ÚtreeÚfunction_defr3   r   r   Ú	list_keysr4   Ú	dict_keysÚeval_result_keyÚeval_results_keysr*   s                 @r   Ú%_extract_code_evaluator_feedback_keysrM      s$  ø€ ÝÔ# DÑ)Ô)€Kðð ð ð(	ð 	ð 	ð)ð )ð )ð )ð )õV ”/ +Ñ.Ô.€Kð ÝŒy˜Ñ%Ô%ˆØ”y ”|ˆÝ˜,­¬½#Ô:NÐ(OÑPÔPð 	ØˆIàˆ	Øˆå”H˜\Ñ*Ô*ð 	/ñ 	/ˆDÝ˜$¥¤
Ñ+Ô+ð /Ý˜dœj­#¬(Ñ3Ô3ð BØ "�IØ#œzœð Mð M˜Ø!×(Ò(Ð)FÐ)FÀsÑ)KÔ)KÑLÔLÐLÐLÝ! $¤,¨q¤/µ3´8Ñ<Ô<ð BØ8A˜	 $¤,¨q¤/Ô"4Ñ5øÝ˜D¥#¤*Ñ-Ô-ð 	/°$´*Ð2HØ-Ð-¨d¬jÑ9Ô9�	Ø"?Ð"?ÀÄ
Ñ"KÔ"K�Ø$CÐ$CØ”J 	ñ%ô %Ð!ð —’˜IÑ&Ô&Ð&Ø—’˜OÑ,Ô,Ð,Ø—’Ð-Ñ.Ô.Ð.ùð Ð4ˆtˆt ,Ô"3Ð!4Ð4øåð ð ð Øˆ	ˆ	ˆ	ðøøøs   ¶AG Á?EG ÇG+Ç*G+c                óF   — 	 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.
    )rM   Ú	Exception)r   s    r   Ú_safe_extract_feedback_keysrP   �   s9   € ðÝ4°TÑ:Ô:Ð:øÝð ð ð Øˆ	ˆ	ˆ	ðøøøs   ‚ ‘ Ÿ )r   r	   r
   r   )r   r   r
   r   )Ú__doc__Ú
__future__r   r   r8   r:   Útypingr   Úhasattrr   r   r   Ú__annotations__r   rM   rP   © r   r   ú<module>rW      så   ððð ð ð #Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð ð  '˜w s¨EÑ2Ô2ÐG€S„WˆcŒlÐÐ¸¼¸ð ð ð ð ñ ð
Dð Dð Dð Dð
oð oð oð oðd
ð 
ð 
ð 
ð 
ð 
r   