Ë
    uPêj ;  ã                   óè   — d Z ddlmZ ddlmZ ddlZddlmZ ddlm	Z	 ddl
mZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZ dd	lmZ dd
lmZ dej>                  dee e!f   fd„Z" G d„ de«      Z#y)z4
OpenAI Evals API configuration and transformations
é    )ÚMapping)ÚFinalN)Úverbose_logger©Úencode_url_path_segment)ÚBaseEvalsAPIConfigÚLiteLLMLoggingObj)ÚCancelEvalResponseÚCancelRunResponseÚCreateEvalRequestÚCreateRunRequestÚDeleteEvalResponseÚEvalÚListEvalsParamsÚListEvalsResponseÚListRunsParamsÚListRunsResponseÚRunÚRunDeleteResponseÚUpdateEvalRequest)ÚGenericLiteLLMParams)ÚLlmProvidersÚraw_responseÚreturnc                 ó"   — | j                  «       S ©N)Újson)r   s    úm/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/openai/evals/transformation.pyÚ_parsed_response_jsonr   #   s   € Ø×ÑÓÐó    c                   óÈ  — e Zd ZdZedefd„«       Zdededz  defd„Z		 d(de
dz  d	e
d
e
dz  de
fd„Zdedededefd„Zdej                  dedefd„Zdedededee
ef   fd„Zdej                  dedefd„Zd
e
de
dededee
ef   f
d„Zdej                  dedefd„Zd
e
dede
dededee
eef   fd„Zdej                  dedefd„Zd
e
de
dededee
ef   f
d„Zdej                  dedefd„Zd
e
de
dededee
eef   f
d„Z dej                  dede!fd„Z"d
e
de#dededee
ef   f
d„Z$dej                  dede%fd„Z&d
e
de'dededee
ef   f
d„Z(dej                  dede)fd „Z*d
e
d!e
de
dededee
ef   fd"„Z+dej                  dede%fd#„Z,d
e
d!e
de
dededee
eef   fd$„Z-dej                  dede.fd%„Z/d
e
d!e
de
dededee
eef   fd&„Z0dej                  dede1fd'„Z2y))ÚOpenAIEvalsConfigz'OpenAI-specific Evals API configurationr   c                 ó"   — t         j                  S r   )r   ÚOPENAI)Úselfs    r   Úcustom_llm_providerz%OpenAIEvalsConfig.custom_llm_provider*   s   € ä×"Ñ"Ð"r    ÚheadersÚlitellm_paramsNc                 ó¾   — ddl }ddlm} d}|r|j                  }|xs$ |j                  xs |j                  xs  |d«      }|st        d«      ‚d|› �|d<   d|d	<   |S )
zAdd OpenAI-specific headersr   N)Úget_secret_strÚOPENAI_API_KEYz(OPENAI_API_KEY is required for Evals APIzBearer ÚAuthorizationzapplication/jsonzContent-Type)ÚlitellmÚlitellm.secret_managers.mainr*   Úapi_keyÚ
openai_keyÚ
ValueError)r%   r'   r(   r-   r*   r/   s         r   Úvalidate_environmentz&OpenAIEvalsConfig.validate_environment.   sr   € ãÝ?ð ˆÙØ$×,Ñ,ˆGàÒf˜WŸ_™_Òf°×0BÑ0BÒfÁnÐUeÓFfˆáÜÐGÓHÐHð &-¨W¨IÐ#6ˆ�Ñ Ø"4ˆ�Ñàˆr    Úapi_baseÚendpointÚeval_idc                 óD   — |€d}|rt        |d¬«      }|› d|› �S |› d|› �S )z%Get complete URL for OpenAI Evals APIúhttps://api.openai.comr5   ©Ú
field_nameú
/v1/evals/z/v1/r   )r%   r3   r4   r5   Úencoded_eval_ids        r   Úget_complete_urlz"OpenAIEvalsConfig.get_complete_urlC   sB   € ð ÐØ/ˆHáÜ%<¸WÐQZÔ%[ˆOØ�Z˜z¨/Ð):Ð;Ð;Ø�˜4 ˜zÐ*Ð*r    Úcreate_requestc                 óŠ   — t        j                  d|«       |j                  «       D ��ci c]  \  }}|€Œ	||“Œ }}}|S c c}}w )z(Transform create eval request for OpenAIz$Transforming create eval request: %s)r   ÚdebugÚitems)r%   r=   r(   r'   ÚkÚvÚrequest_bodys          r   Útransform_create_eval_requestz/OpenAIEvalsConfig.transform_create_eval_requestR   sK   € ô 	×ÑÐCÀ^ÔTð 1?×0DÑ0DÓ0F×X©¨¨1È!É-˜q !™tÐXˆÑXàÐùó Ys   ª
?µ?r   Úlogging_objc                 ón   — t        |«      }t        j                  d|«       t        j                  |«      S )ú(Transform OpenAI response to Eval objectz%Transforming create eval response: %s©r   r   r?   r   Úmodel_validate©r%   r   rE   Úresponse_jsons       r   Útransform_create_eval_responsez0OpenAIEvalsConfig.transform_create_eval_response`   ó0   € ô  5°\ÓBˆÜ×ÑÐDÀmÔTä×"Ñ" =Ó1Ð1r    Úlist_paramsc                 óB  — d}|r|j                   r|j                   }| j                  |d¬«      }i }d|v r|d   r|d   |d<   d|v r|d   r|d   |d<   d|v r|d   r|d   |d<   d|v r|d   r|d   |d<   d|v r|d   r|d   |d<   t        j                  d	|«       ||fS )
z'Transform list evals request for OpenAIr7   Úevals)r3   r4   ÚlimitÚafterÚbeforeÚorderÚorder_byz@List evals request made to OpenAI Evals endpoint with params: %s)r3   r<   r   r?   )r%   rN   r(   r'   r3   ÚurlÚquery_paramss          r   Útransform_list_evals_requestz.OpenAIEvalsConfig.transform_list_evals_requestk   sò   € ð ,ˆÙ˜n×5Ò5Ø%×.Ñ.ˆHà×*Ñ*°HÀwÐ*ÓOˆð 24ˆØ�kÑ! k°'Ò&:Ø$/°Ñ$8ˆL˜Ñ!Ø�kÑ! k°'Ò&:Ø$/°Ñ$8ˆL˜Ñ!Ø�{Ñ" {°8Ò'<Ø%0°Ñ%:ˆL˜Ñ"Ø�kÑ! k°'Ò&:Ø$/°Ñ$8ˆL˜Ñ!Ø˜Ñ$¨°ZÒ)@Ø'2°:Ñ'>ˆL˜Ñ$ä×ÑØNØô	
ð
 �LÐ Ð r    c                 ón   — t        |«      }t        j                  d|«       t        j                  |«      S )z.Transform OpenAI response to ListEvalsResponsez$Transforming list evals response: %s)r   r   r?   r   rI   rJ   s       r   Útransform_list_evals_responsez/OpenAIEvalsConfig.transform_list_evals_responseŒ   ó0   € ô  5°\ÓBˆÜ×ÑÐCÀ]ÔSä ×/Ñ/°Ó>Ð>r    c                 ó^   — | j                  |d|¬«      }t        j                  d|«       ||fS )z%Transform get eval request for OpenAIrP   ©r3   r4   r5   zGet eval request - URL: %s©r<   r   r?   ©r%   r5   r3   r(   r'   rV   s         r   Útransform_get_eval_requestz,OpenAIEvalsConfig.transform_get_eval_request—   s7   € ð ×*Ñ*°HÀwÐX_Ð*Ó`ˆä×ÑÐ9¸3Ô?à�Gˆ|Ðr    c                 ón   — t        |«      }t        j                  d|«       t        j                  |«      S )rG   z"Transforming get eval response: %srH   rJ   s       r   Útransform_get_eval_responsez-OpenAIEvalsConfig.transform_get_eval_response¥   s0   € ô  5°\ÓBˆÜ×ÑÐAÀ=ÔQä×"Ñ" =Ó1Ð1r    Úupdate_requestc                 óº   — | j                  |d|¬«      }|j                  «       D ��ci c]  \  }}|€Œ	||“Œ }	}}t        j                  d||	«       |||	fS c c}}w )z(Transform update eval request for OpenAIrP   r]   z'Update eval request - URL: %s, body: %s)r<   r@   r   r?   )
r%   r5   rc   r3   r(   r'   rV   rA   rB   rC   s
             r   Útransform_update_eval_requestz/OpenAIEvalsConfig.transform_update_eval_request°   sl   € ð ×*Ñ*°HÀwÐX_Ð*Ó`ˆð 1?×0DÑ0DÓ0F×X©¨¨1È!É-˜q !™tÐXˆÑXä×ÑÐFÈÈ\ÔZà�G˜\Ð)Ð)ùó	 Ys
   ¨
A³Ac                 ón   — t        |«      }t        j                  d|«       t        j                  |«      S )rG   z%Transforming update eval response: %srH   rJ   s       r   Útransform_update_eval_responsez0OpenAIEvalsConfig.transform_update_eval_responseÂ   rM   r    c                 ó^   — | j                  |d|¬«      }t        j                  d|«       ||fS )z(Transform delete eval request for OpenAIrP   r]   zDelete eval request - URL: %sr^   r_   s         r   Útransform_delete_eval_requestz/OpenAIEvalsConfig.transform_delete_eval_requestÍ   s7   € ð ×*Ñ*°HÀwÐX_Ð*Ó`ˆä×ÑÐ<¸cÔBà�Gˆ|Ðr    c                 ón   — t        |«      }t        j                  d|«       t        j                  |«      S )z/Transform OpenAI response to DeleteEvalResponsez%Transforming delete eval response: %s)r   r   r?   r   rI   rJ   s       r   Útransform_delete_eval_responsez0OpenAIEvalsConfig.transform_delete_eval_responseÛ   ó0   € ô  5°\ÓBˆÜ×ÑÐDÀmÔTä!×0Ñ0°Ó?Ð?r    c                 ój   — | j                  |d|¬«      › d�}i }t        j                  d|«       |||fS )z(Transform cancel eval request for OpenAIrP   r]   ú/cancelzCancel eval request - URL: %sr^   )r%   r5   r3   r(   r'   rV   rC   s          r   Útransform_cancel_eval_requestz/OpenAIEvalsConfig.transform_cancel_eval_requestæ   sJ   € ð ×-Ñ-°xÈ'Ð[bÐ-ÓcÐdÐdkÐlˆð 24ˆä×ÑÐ<¸cÔBà�G˜\Ð)Ð)r    c                 ón   — t        |«      }t        j                  d|«       t        j                  |«      S )z/Transform OpenAI response to CancelEvalResponsez%Transforming cancel eval response: %s)r   r   r?   r
   rI   rJ   s       r   Útransform_cancel_eval_responsez0OpenAIEvalsConfig.transform_cancel_eval_response÷   rl   r    c                 óò   — d}|r|j                   r|j                   }t        |d¬«      }|› d|› d�}|j                  «       D ��	ci c]  \  }}	|	€Œ	||	“Œ }
}}	t        j                  d||
«       ||
fS c c}	}w )z'Transform create run request for OpenAIr7   r5   r8   r:   ú/runsz&Create run request - URL: %s, body: %s)r3   r   r@   r   r?   )r%   r5   r=   r(   r'   r3   r;   rV   rA   rB   rC   s              r   Útransform_create_run_requestz.OpenAIEvalsConfig.transform_create_run_request  sŒ   € ð ,ˆÙ˜n×5Ò5Ø%×.Ñ.ˆHä!8¸ÈYÔ!WˆØ �z ¨OÐ+<¸EÐBˆð 1?×0DÑ0DÓ0F×X©¨¨1È!É-˜q !™tÐXˆÑXä×ÑÐEÀsÈLÔYà�LÐ Ð ùó	 Ys   Á
A3ÁA3c                 ón   — t        |«      }t        j                  d|«       t        j                  |«      S )ú'Transform OpenAI response to Run objectz$Transforming create run response: %s©r   r   r?   r   rI   rJ   s       r   Útransform_create_run_responsez/OpenAIEvalsConfig.transform_create_run_response  s0   € ô  5°\ÓBˆÜ×ÑÐCÀ]ÔSä×!Ñ! -Ó0Ð0r    c                 ó$  — d}|r|j                   r|j                   }t        |d¬«      }|› d|› d�}i }d|v r|d   r|d   |d<   d|v r|d   r|d   |d<   d|v r|d   r|d   |d<   d	|v r|d	   r|d	   |d	<   t        j                  d
|«       ||fS )z&Transform list runs request for OpenAIr7   r5   r8   r:   rs   rQ   rR   rS   rT   z?List runs request made to OpenAI Evals endpoint with params: %s)r3   r   r   r?   )	r%   r5   rN   r(   r'   r3   r;   rV   rW   s	            r   Útransform_list_runs_requestz-OpenAIEvalsConfig.transform_list_runs_request$  sÞ   € ð ,ˆÙ˜n×5Ò5Ø%×.Ñ.ˆHä!8¸ÈYÔ!WˆØ �z ¨OÐ+<¸EÐBˆð 24ˆØ�kÑ! k°'Ò&:Ø$/°Ñ$8ˆL˜Ñ!Ø�kÑ! k°'Ò&:Ø$/°Ñ$8ˆL˜Ñ!Ø�{Ñ" {°8Ò'<Ø%0°Ñ%:ˆL˜Ñ"Ø�kÑ! k°'Ò&:Ø$/°Ñ$8ˆL˜Ñ!ä×ÑØMØô	
ð
 �LÐ Ð r    c                 ón   — t        |«      }t        j                  d|«       t        j                  |«      S )z-Transform OpenAI response to ListRunsResponsez#Transforming list runs response: %s)r   r   r?   r   rI   rJ   s       r   Útransform_list_runs_responsez.OpenAIEvalsConfig.transform_list_runs_responseE  s0   € ô  5°\ÓBˆÜ×ÑÐBÀMÔRä×.Ñ.¨}Ó=Ð=r    Úrun_idc                 ó~   — t        |d¬«      }t        |d¬«      }|› d|› d|› �}t        j                  d|«       ||fS )z$Transform get run request for OpenAIr5   r8   r}   r:   ú/runs/zGet run request - URL: %s©r   r   r?   )	r%   r5   r}   r3   r(   r'   r;   Úencoded_run_idrV   s	            r   Útransform_get_run_requestz+OpenAIEvalsConfig.transform_get_run_requestP  sO   € ô "9¸ÈYÔ!WˆÜ 7¸È8Ô TˆØ �z ¨OÐ+<¸FÀ>ÐBRÐSˆä×ÑÐ8¸#Ô>à�Gˆ|Ðr    c                 ón   — t        |«      }t        j                  d|«       t        j                  |«      S )rv   z!Transforming get run response: %srw   rJ   s       r   Útransform_get_run_responsez,OpenAIEvalsConfig.transform_get_run_responsea  s0   € ô  5°\ÓBˆÜ×ÑÐ@À-ÔPä×!Ñ! -Ó0Ð0r    c                 ó†   — t        |d¬«      }t        |d¬«      }|› d|› d|› d�}i }	t        j                  d|«       |||	fS )z'Transform cancel run request for OpenAIr5   r8   r}   r:   r   rn   zCancel run request - URL: %sr€   ©
r%   r5   r}   r3   r(   r'   r;   r�   rV   rC   s
             r   Útransform_cancel_run_requestz.OpenAIEvalsConfig.transform_cancel_run_requestl  s\   € ô "9¸ÈYÔ!WˆÜ 7¸È8Ô TˆØ �z ¨OÐ+<¸FÀ>ÐBRÐRYÐZˆð 24ˆä×ÑÐ;¸SÔAà�G˜\Ð)Ð)r    c                 ón   — t        |«      }t        j                  d|«       t        j                  |«      S )z.Transform OpenAI response to CancelRunResponsez$Transforming cancel run response: %s)r   r   r?   r   rI   rJ   s       r   Útransform_cancel_run_responsez/OpenAIEvalsConfig.transform_cancel_run_response€  r[   r    c                 ó„   — t        |d¬«      }t        |d¬«      }|› d|› d|› �}i }	t        j                  d|«       |||	fS )z'Transform delete run request for OpenAIr5   r8   r}   r:   r   zDelete run request - URL: %sr€   r†   s
             r   Útransform_delete_run_requestz.OpenAIEvalsConfig.transform_delete_run_request‹  sY   € ô "9¸ÈYÔ!WˆÜ 7¸È8Ô TˆØ �z ¨OÐ+<¸FÀ>ÐBRÐSˆð 24ˆä×ÑÐ;¸SÔAà�G˜\Ð)Ð)r    c                 ón   — t        |«      }t        j                  d|«       t        j                  |«      S )z.Transform OpenAI response to RunDeleteResponsez$Transforming delete run response: %s)r   r   r?   r   rI   rJ   s       r   Útransform_delete_run_responsez/OpenAIEvalsConfig.transform_delete_run_responseŸ  r[   r    r   )3Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r&   Údictr   r2   Ústrr<   r   rD   ÚhttpxÚResponser	   r   rL   r   ÚtuplerX   r   rZ   r`   rb   r   re   rg   ri   r   rk   ro   r
   rq   r   rt   r   rx   r   rz   r   r|   r‚   r„   r‡   r   r‰   r‹   r   r�   © r    r   r"   r"   '   sÖ  „ Ù1àð# \ò #ó ð#ð¨Dð ÐBVÐY]ÑB]ð Ðbfó ð2 #ñ	+à˜‘*ð+ð ð+ð �t‘ð	+ð
 
ó+ðà)ðð -ðð ð	ð
 
óð	2à—n‘nð	2ð 'ð	2ð 
ó		2ð!à$ð!ð -ð!ð ð	!ð
 
ˆs�DˆyÑ	ó!ðB	?à—n‘nð	?ð 'ð	?ð 
ó		?ðàðð ðð -ð	ð
 ðð 
ˆs�DˆyÑ	óð	2à—n‘nð	2ð 'ð	2ð 
ó		2ð*àð*ð *ð*ð ð	*ð
 -ð*ð ð*ð 
ˆs�D˜$ˆÑ	ó*ð$	2à—n‘nð	2ð 'ð	2ð 
ó		2ðàðð ðð -ð	ð
 ðð 
ˆs�DˆyÑ	óð	@à—n‘nð	@ð 'ð	@ð 
ó		@ð*àð*ð ð*ð -ð	*ð
 ð*ð 
ˆs�D˜$ˆÑ	ó*ð"	@à—n‘nð	@ð 'ð	@ð 
ó		@ð!àð!ð )ð!ð -ð	!ð
 ð!ð 
ˆs�DˆyÑ	ó!ð,	1à—n‘nð	1ð 'ð	1ð 
ó		1ð!àð!ð $ð!ð -ð	!ð
 ð!ð 
ˆs�DˆyÑ	ó!ðB	>à—n‘nð	>ð 'ð	>ð 
ó		>ðàðð ðð ð	ð
 -ðð ðð 
ˆs�DˆyÑ	óð"	1à—n‘nð	1ð 'ð	1ð 
ó		1ð*àð*ð ð*ð ð	*ð
 -ð*ð ð*ð 
ˆs�D˜$ˆÑ	ó*ð(	?à—n‘nð	?ð 'ð	?ð 
ó		?ð*àð*ð ð*ð ð	*ð
 -ð*ð ð*ð 
ˆs�D˜$ˆÑ	ó*ð(	?à—n‘nð	?ð 'ð	?ð 
ô		?r    r"   )$r‘   Úcollections.abcr   Útypingr   r•   Úlitellm._loggingr   Ú$litellm.litellm_core_utils.url_utilsr   Ú*litellm.llms.base_llm.evals.transformationr   r	   Úlitellm.types.llms.openai_evalsr
   r   r   r   r   r   r   r   r   r   r   r   r   Úlitellm.types.routerr   Úlitellm.types.utilsr   r–   r”   Úobjectr   r"   r˜   r    r   ú<module>r¢      sk   ðñõ $Ý ã å +Ý H÷÷÷ ÷ õ õ 6Ý ,ð¨¯©ð ¸7À3ÈÀ;Ñ;Oó ôA?Ð*õ A?r    